0

我正在尝试执行传递给它的参数的动态查询,但它不起作用:

DECLARE @ASA_EXPORT_TABLE NVARCHAR(MAX) = 'EXPORT_PRODUCT'
DECLARE @ASADB_NAME NVARCHAR (MAX) = 'WHITESTUFF_WSSI_7700_ASA'
DECLARE @TOP_1 NVARCHAR(MAX)
SET @TOP_1 = '
        SELECT TOP 1 ''['' + COLUMN_NAME + '']''
        FROM @AsaDb_Name_IN.INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = ''@ASA_EXPORT_TABLE_IN''
        '
EXEC sp_executesql @TOP_1, N'@ASA_EXPORT_TABLE_IN NVARCHAR(MAX), @AsaDb_Name_IN NVARCHAR (MAX)', 
@ASA_EXPORT_TABLE_IN = @ASA_EXPORT_TABLE, @AsaDb_Name_IN = @AsaDb_NamE

错误信息是:

消息 102,级别 15,状态 1,第 3 行 '.' 附近的语法不正确。

4

1 回答 1

1

您不能将数据库名称、表名称或列名称指定为参数。参数规则仅适用于查询中的常量。

所以,这应该工作:

DECLARE @ASADB_NAME NVARCHAR(MAX) = N'WHITESTUFF_WSSI_7700_ASA';
DECLARE @TOP_1 NVARCHAR(MAX);
SET @TOP_1 = '
        SELECT TOP 1 ''['' + COLUMN_NAME + '']''
        FROM @AsaDb_Name_IN.INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = ''@ASA_EXPORT_TABLE_IN''
        ';
SET @TOP_1 = REPLACE(@TOP_1, '@AsaDb_Name_IN', @AsaDb_NamE);

EXEC sp_executesql @TOP_1, N'@ASA_EXPORT_TABLE_IN NVARCHAR(MAX)', 
    @ASA_EXPORT_TABLE_IN = @ASA_EXPORT_TABLE;
于 2015-07-06T12:18:45.787 回答