【问题标题】:Dynamic SQL Insert Statement [closed]动态 SQL 插入语句 [关闭]
【发布时间】:2013-12-28 12:58:38
【问题描述】:

我在下面的这个声明不起作用。有什么想法吗?

DECLARE @TargetDB NVARCHAR(50)
DECLARE @SourceDB NVARCHAR(50)
DECLARE @InsetRecords NVARCHAR(1000)
SET @TargetDB = 'MySSISDb'
SET @SourceDB = 'MySSISDb'

SET @InsetRecords = 'INSERT INTO  + @TargetDB + .dbo.Item2(ProductNumber, ProductName) SELECT(ProductNumber, ProductName) FROM  + @SourceDB + .dbo.Item'
EXEC (@InsetRecords)

【问题讨论】:

  • 什么不起作用?你得到什么错误?您使用的是哪个 RDBMS?
  • 动态 SQL 不会自动解析变量。试试这个:SET @InsetRecords = 'INSERT INTO ' + @TargetDB + '.dbo.Item2(ProductNumber, ProductName) SELECT(ProductNumber, ProductName) FROM ' + @SourceDB + '.dbo.Item'
  • 我正在使用 SQL2008R2。这是我得到的错误。
  • Msg 102,级别 15,状态 1,第 1 行 '+' 附近的语法不正确。消息 102,级别 15,状态 1,第 1 行 ',' 附近的语法不正确。
  • 感谢 SchmitzIT。我尝试了您的建议,但仍然出现问题,但如果它只有 1 列,它可以工作。知道为什么吗?非常感谢。

标签: sql sql-server sql-server-2008 insert


【解决方案1】:

问题似乎在于您的动态 SQL 并不是真正的动态 SQL。您不是插入变量的值,而是将变量名称添加到 SQL 字符串。

换行试试:

SET @InsetRecords = 'INSERT INTO  + @TargetDB + .dbo.Item2(ProductNumber, 
ProductName) SELECT(ProductNumber, ProductName) FROM  + @SourceDB + .dbo.Item'

与:

SET @InsetRecords = 'INSERT INTO ' + @TargetDB + '.dbo.Item2(ProductNumber, 
ProductName) SELECT(ProductNumber, ProductName) FROM ' + @SourceDB + '.dbo.Item'

【讨论】:

  • 感谢 SchmitzIT。我试过了,但仍然有问题,但如果它只有 1 列,它可以工作。似乎表中有超过 1 列存在语法错误。如果可以的话,请帮助我。非常感谢。我非常感谢您的帮助。
  • 听起来很奇怪。语法对我来说看起来不错。最后试试这个。代替EXEC (@InsetRecords,使用PRINT @InsetRecords。将输出粘贴到此处。您也可以尝试使用EXEC sp_executeSQL 而不是EXEC。 IT 专门用于动态 SQL。
猜你喜欢
  • 2018-10-18
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多