使用 foreach 循环容器在 table 中创建新列 - 无法解决 "incorrect syntax near '@P1'" 错误

Using foreach loop container to create new columns in a table- can't solve "incorrect syntax near '@P1'" error

我正在尝试使用 foreach 循环容器获取行值并将它们放入字段中。但出于某种原因,如果没有 运行 出现此错误,我将无法正常工作:

alter table /databasename/.dbo.cp_hh_foo..." failed with the following error: "Incorrect syntax near '@P1'.

问题似乎出在最后的执行 SQL 语句中。前两个 execute SQL 语句工作正常。我想我的 variable/parameter 映射有误,但我不确定。

我的数据流是这样的:

基本上是这样的:

  1. 首先执行SQL任务创建新的table

  2. 第二次执行 SQL 任务选择 table,完整结果集进入 object-type 变量 "AllocItems"

  1. Foreach 循环容器(配置为 ADO 枚举器)将特定行从 "AllocItems" 映射到变量 "AllocItemsSQL1"。这些字符串应该成为我正在创建的table
  2. 中的字段名称

  1. 在 foreach 循环容器中执行 SQL 任务会改变 table。 SQL 查询:alter table MIT_Client_Profitability.dbo.cp_hh_footprint add ? varchar(255)

我尝试过的事情:

提前感谢您的任何建议!

这个

alter table MIT_Client_Profitability.dbo.cp_hh_footprint add ? varchar(255)

是数据定义语言 (DDL) 语句。 DDL 不能参数化。您必须使用字符串连接创建语句。

以 David 的回答为基础

创建一个新的 SSIS 变量,@[User::Sql],类型为字符串,并在表达式框中添加以下语法

"alter table MIT_Client_Profitability.dbo.cp_hh_footprint add " + @[User::AllocItemSQL1] + " varchar(255);"

这种方法的好处是您可以在执行 SQL 任务上放置一个断点,并在任务尝试执行它之前查看语句的外观。然后修改执行 SQL 任务以使用新变量并删除参数。

否则,动态 tsql 方法应该有效,只是您需要修改语法。令牌替换在字符串内不起作用。更像这样的东西应该符合我的心智模型

declare @newcolumn varchar(255) = ?;
declare @SQL varchar(255) = 'alter table MIT_Client_Profitability.dbo.cp_hh_footprint add ' + @newcolumn + '  varchar(255)'; 
exec(@SQL);