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
;