SQL - 插入QUOTENAME(@DatabaseName)

时间:2014-10-22 10:13:04

标签: tsql

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,Level 15,State 1,Line 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,Level 15,State 1,Line 9
  注意'注意'附近的语法不正确。

1 个答案:

答案 0 :(得分:2)

如果要使用动态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
;