2016-09-20 3 views
0

次の関数を動作させる方法を教えてください。私はうまく動作するが、必要な構文でそれを変更することによって、北風の例を見つけました。すべての行が選択されると、 'effec'の近くで条件が予想されるコンテキストで指定された非ブール型の式を記述するエラーが発生します。私は改正が必要な文は以下の通りです:exec sp_executesql文でエラーが発生しました "条件が想定されるコンテキストで指定された非ブール型の式"

select max(person_sid) from dim_person 
where [Effective_To] <='2015-10-01' 
group by person_id_number 

declare @sql nvarchar(50), @dt datetime; 

set @dt = '2015-10-01'; 

set @sql = N'SELECT max(person_sid) FROM dim_person WHERE effective_to <= @date'; 

exec sp_executesql @sql, N'@date datetime',@dt; 
+0

もちろん、最後の行を選択するだけで、 '@sqlは宣言する必要があります 'と言います - それは上の数行で宣言されています。最初の 'select ....'を3行だけ選ぶとどうなりますか?それは大丈夫ですか? – Jamiec

+0

こんにちは、ええ、すべてうまく動作します、私はデータを持つ出力された列を取得します、それは他のすべてで動作するように思わない最後の幹部だけです。 – Ryan

+1

動的SQL文字列に沿って50文字をカウントします。 45-50番目のcharが 'effec'を参照してください – Jamiec

答えて

2

あなたはより多くの文字とそれを充填しているしかし、あなたはNVARCHAR(50)

として@sqlを定義している...

は、そのサイズを大きくしてください、 と言うことができます:

DECLARE @Sql AS NVARCHAR(4000) 
+1

Ack、私はこの答えから数秒です。 – Jamiec

1

次のスクリプトを使用します。クエリを収容するために、変数@sqlに十分な幅を与えます。

DECLARE @sql nvarchar(MAX), @dt datetime; 

set @dt = '2015-10-01'; 

set @sql = N'SELECT max(person_sid) FROM dim_person WHERE effective_to <= @date'; 

exec sp_executesql @sql, N'@date datetime',@dt; 
関連する問題