2009-04-02 24 views
7

に挿入する日付は、次のTSQLを考えてみましょう:TSQL - 動的SQL

SET @WhereClause1 = 'where a.Date > ' + @InvoiceDate 

私は、日付/文字列変換エラーが発生します。 @InvoiceDateはdatetime変数です。正しい構文は何ですか?

答えて

8

これは機能する場合があります。

SET @WhereClause1 = 'where a.Date > ''' + convert(varchar, @InvoiceDate) + '''' 

ただし、値がnullの場合はエラーが発生します。

+0

を引用符 – eKek0

+0

で(文字列内の)日付を同封しなければならないので、これは動作しません[OK]を、おかげで、私はそれを持つ –

+0

を修正しますこれは私が必要としたことでした。ありがとうすべて – Jeff

1

...おそらく、引用符で日付文字列を囲む必要があります。

null値や他のバリデーションをチェックする必要があるので、実際には呼び出し元ルーチンで日付文字列を作成するほうがよいでしょう。

6

これは動作します:

SET @WhereClause1 = 'where a.Date > ''' + cast(@InvoiceDate as varchar(100)) + '''' 
+0

私はこれも動作するので、私は2つの答えをマークすることができたらいいと思います。ありがとう – Jeff

+0

+1それを100%得るために+1 –

+0

私はその問題を抱えているとき、私は1つを選択し、他の人にポイントを与える(矢印が上向き)(1以上の場合)。それはあなたが同じを行う必要があるというわけではありません:) – eKek0

1
EXEC sp_executesql N'SELECT * FROM Orders WHERE a.Date > @date', 
        N'@date datetime', 
        @date = @InvoiceDate