SQL - 插入到 QUOTENAME(@DatabaseName) 中


DECLARE @DatabaseName varchar(30), @Article varchar(16), @PartnerID int
set @DatabaseName = 'DEMO'
set @Article = 'Article1'
set @PartnerID = 1
INSERT INTO QUOTENAME(@DatabaseName) + '.dbo.move(Article, Partner, Note)'
select @Article, @PartnerID, 'Note'

我有这个,错误是:

Msg 102,级别 15,状态 1,第 7
行 "+"附近的语法不正确。

我尝试:

DECLARE @SQL nvarchar(max)
DECLARE @DatabaseName varchar(30), @Article varchar(16), @PartnerID int
set @DatabaseName = 'Demo'
set @Article = 'Article1'
set @PartnerID = 1
set @SQL = N'INSERT INTO '+ QUOTENAME(@DatabaseName) + N'.dbo.move(Article, Partner, Note)'
+ N'select ' + @Article + N', ' + @PartnerID + N', '''Note''' '
exec @SQL

但是我收到此错误:

Msg 102,级别 15,状态 1,第 9
行 "注释"附近的语法不正确。

如果你打算使用动态 SQL(如果你有替代方案,应该避免这样做(,使用 sp_executesql 和参数仍然是一个好主意,使用 REPLACE 来构造语句而不是串联可以节省很多调试正确转义的麻烦。在您的示例中:

SET @SQL = REPLACE(
    'INSERT INTO $database.dbo.move(Article, Partner, Note) 
     VALUES (@Article, @Partner, ''Note'')', 
    '$database', QUOTENAME(@DatabaseName)
);
PRINT @SQL;  -- check what we've produced
EXECUTE sp_executesql 
    @stmt = @sql, 
    @params = N'@Article VARCHAR(16), @Partner INT', 
    @Article = @Article, @Partner = @PartnerID
;

相关内容

最新更新