2012-11-02 70 views
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 

返回任何記錄。我究竟做錯了什麼?

回答

0

除了SQL語句無效之外,QUOTENAME()只是在所提供的變量周圍放置括號「[]」。更換EXECUTE語句與打印語句,你會得到下面的結果:

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]' 
+0

謝謝!對PRINT技術的好的提示,我會用很多。 –