0

Incorrect syntax near '11'.SQL Serverでエラーが発生します。

ストアドプロシージャがありますSP_TEST

...
@ALISTARIHI datetime
...
AS
BEGIN
...
exec('CONVERT(DATETIME,'+@ALISTARIHI+')')

SP_TEST の呼び出し:

exec SP_TEST '08.11.2013'

上で述べたように、エラーが発生します

'11' 付近の構文が正しくありません

私が電話するとき。どうすれば修正できますか?

注: 上記のコードの一部は次のように見えます

4

2 に答える 2

5

非常に多くのことが間違っています。

  1. datetime を datetime に変換することに関するコメントは適切です。なぜあなたはこれをやっている?そして、なぜあなたの日時があいまいな形式になっているのですか? それが8月11日なのか11月8日なのか、まったくわかりません。を使ってみてくださいyyyymmdd

  2. これを行う必要があると仮定すると、なぜ動的 SQL で行うのでしょうか?

  3. 動的 SQL が必要だと仮定すると、ステートメントが不完全なのはなぜですか? 値の前後に文字列の区切り文字を入れたとしても、これは何をするのでしょうか?

    CONVERT(DATETIME, '20131108');
    

    ああ、そうです。

    メッセージ 156、レベル 15、状態 1
    キーワード「CONVERT」付近の構文が正しくありません。

    声明は完全ではありません。だから多分あなたは意味した:

    EXEC('SELECT CONVERT(DATETIME,'''+@ALISTARIHI+''')')
    

しかし実際には、代わりに次のようなものが必要になるでしょう:

DECLARE @sql NVARCHAR(MAX) = N'SELECT CONVERT(DATETIME, @d);';
EXEC sp_executesql @sql, N'@d DATETIME', @ALISTARIHI;

しかし、日時を日時に変換する理由はまだわかりません。

PSなぜ変数にそんなに長くて入力しにくい名前を付けるのですか?

于 2013-11-08T15:30:33.107 に答える
0

問題は、パラメータとして渡し08.11.2013、EXEC で連結した後に受け取ることCONVERT(DATETIME,08.11.2013)です。つまり、文字列がありません。これが ERROR の原因です。それは違いないCONVERT(DATETIME,'08.11.2013')

コマンドexec('CONVERT(DATETIME,'+@ALISTARIHI+')')も私には意味がありません。違います。でなければなりませんexec('SELECT CONVERT(DATETIME,'''+@ALISTARIHI+''')')。結果は現在のコードの範囲外になります (EXEC のため)。

于 2013-11-08T15:30:25.650 に答える