0

次と同じ結果を生成する動的クエリを作成しようとしていますが、固定テーブル名を変数に置き換えています。

    SELECT *
    WHERE tableName = 'Table2A' 

正常に動作しますが

    DECLARE @tablename AS NVARCHAR(100)
    SET @tablename = N'Table2A'
    DECLARE @execquery AS NVARCHAR(MAX)
    SET @execquery = N'
       SELECT *
       WHERE tableName = ''' + QUOTENAME(@tablename) + N''''    

    EXECUTE sp_executesql @execquery

レコードを返しません。私は何が間違っているのですか?

4

1 に答える 1

0

SQLステートメントが無効であるという事実は別として、QUOTENAME()は、指定された変数の前後に角かっこ「[]」を配置するだけです。EXECUTEステートメントをPRINTステートメントに置き換えると、次の結果が得られます。

DECLARE @tablename AS NVARCHAR(100)
    SET @tablename = N'Table2A'
    DECLARE @execquery AS NVARCHAR(MAX)
    SET @execquery = N'
       SELECT *
       WHERE tableName = ''' + QUOTENAME(@tablename) + N''''    
PRINT @execquery
    --EXECUTE sp_executesql @execquery

結果:

   SELECT *
   WHERE tableName = '[Table2A]'
于 2012-11-02T03:32:25.267 に答える