SSIS执行sql任务参数映射

发布于 2024-11-09 17:46:44 字数 556 浏览 1 评论 0原文

我正在尝试使用 SSIS 中的任务执行 sql 脚本。

我的脚本只是在表中插入一堆名称值对。例如 -

插入 mytable(名称,值) 价值观 (?, '值1'), (?, 'value2')

现在,我想将 SSIS 中定义的变量映射到上面语句中的参数。我尝试定义标量变量,但我猜 sql 任务不喜欢这样。哦,插入语句中的所有名称参数都解析为单个变量。

例如我想要 插入 mytable(名称,值) 价值观 ('名称1','值1'), ('name1', 'value2')

当我打开任务的“参数映射”选项卡时,它希望我单独映射每个参数,例如 -

变量名称 - 用户::名称 方向 - 输入 数据类型 - LONG 参数名称 - 0 参数大小 - -1

变量名称 - 用户::名称 方向 - 输入 数据类型 - LONG 参数名称 - 1 参数大小 - -1

如果名称有 5-10 个值,这很快就会失控并且很麻烦,并迫使我为同一名称添加多个分配。

有没有一种简单的方法可以做到这一点?

I'm trying to execute a sql script using the task in SSIS.

My script just inserts a bunch of nambe value pairs in a table. For example -

insert into mytable (name, value)
values
(?, 'value1'),
(?, 'value2')

Now, I want to map a variable defined in SSIS to be mapped to the parameters in the statement above. I tried defining a scalar variable but I guess the sql task doesn't like that. Oh and all the name parameters in the insert statement resolve to a single variable.

For example I want
insert into mytable (name, value)
values
('name1', 'value1'),
('name1', 'value2')

When I open the Parameter Mapping tab for the task, it wants me to map each parameter invidually like -

Variable Name - User::Name
Direction - Input
Data Type - LONG
Parameter Name - 0
Parameter Size - -1

Variable Name - User::Name
Direction - Input
Data Type - LONG
Parameter Name - 1
Parameter Size - -1

This quickly gets out of hand and cumbersome if have 5-10 values for a name and forces me to add multiple assignments for the same name.

Is there an easy(-ier) way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

所有深爱都是秘密 2024-11-16 17:46:44

最简单(也是最可扩展)的方法是使用数据流任务而不是使用执行 SQL 任务。

  1. 添加数据流任务;我假设您已为所有变量填充了正确的参数,并且您知道如何将值传递给它们。
  2. 创建一个虚拟行,其中包含您需要插入的列,因此请使用您最喜欢的任何内容作为源(在本示例中,我使用了 oledb 连接)。一个好的技巧是定义源中每一列的数据类型,因为您将在目标表中需要它们。这会将数据流的元数据与插入表的元数据对齐(屏幕截图 #1)。
  3. 然后将多播组件添加到数据流中。
  4. 对于第一个参数/值,添加派生列组件,干净地命名它,然后继续用变量替换参数的内容。
  5. 对于需要添加的每个其他参数/​​值;复制先前创建的派生列组件,从多播组件添加一个额外分支,然后根据需要继续替换列参数/值。
  6. 添加并集并连接所有流
  7. 插入表中
  8. 瞧! (Screenshot #2)

这种方法的好处是你可以根据需要进行扩展...使用不同的标准验证每个值,修改数据,添加业务规则,丢弃不合规值(通过检查合规值的完整数量)...!

祝你今天过得愉快!

弗朗西斯科.

PS:我准备了更多的屏幕截图......但是 stackoverflow 认为我对这个网站太陌生,无法发布带有图像或两个以上链接的内容(!)哦,好吧......

The easiest (and most extensible) way, is to use a Data Flow Task instead of using an Execute SQL Task.

  1. Add a Dataflow Task; I assume that you have all the variables filled with the right parameters, and that you know how to pass the values onto them.
  2. Create a dummy row with the columns you will need to insert, so use whatever pleases you the most as a source (in this example, i've used an oledb connection). One good tip is to define the datatype(s) of each column in the source as you will need them in your destination table. This will align the metadata of the dataflow with the one the insert table (Screenshot #1).
  3. Then add a multicast component to the dataflow.
  4. For the first parameter/value, add a derived column component, name it cleanly and proceed to substitute the content of your parameters with your variables.
  5. For each further parameter/value that needs to be added; copy the previously created derived column component, add one extra branch from the multicast component and proceed to substitute the column parameter/value as necessary.
  6. Add a union all and join all the flows
  7. Insert into the table
  8. Voilà! (Screenshot #2)

The good thing about this method is that you can make as extensible as you wish... validate each value with different criteria, modify the data, add business rules, discard non-compliant values (by checking the full number of complying values)... !

Have a nice day!

Francisco.

PS: I had prepared a couple more screenshots... but stackoverflow has decided that I am too new to the site to post things with images or more than two links (!) Oh well..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文