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 回答