我试图做一个动态查询传递给它的参数,但它不工作:
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
错误信息是:
Msg 102,第15层,状态1,第3行'.'附近语法错误。
不能指定数据库名、表名或列名作为参数。参数规则只适用于查询中的常量。
那么,这应该可以工作:
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;