【发布时间】:2016-02-18 02:00:27
【问题描述】:
我有一个包,其中包含两个执行 sql 任务和许多 DFT。第一个有声明:
select CAST(floor(rand()*1000)+1 AS INT) AS SeqVar
并且有 ResultSet 单行 - 这很完美。它给了我一个 1 到 1000 之间的随机数,并将该值传递给我称为 SeqVar 的变量。 (我也验证了这行得通)
我遇到的问题是在我的第二个执行 SQL 任务中,我尝试使用从第一个执行 SQL 任务输出的 SeqVar 变量作为以下语句中的参数:
IF OBJECT_ID('tempdb.dbo.[##temp1]') IS NOT NULL
DROP TABLE [##temp1]
CREATE TABLE [##temp1] (
[RecID] int IDENTITY(?,1),
[Name] VARCHAR(30),
[ABA] VARCHAR(10),
[Account] VARCHAR(20),
[Type] VARCHAR(1),
[Date] date,
[Amount] money
);
在参数映射下,我有 SeqVar 变量名称,Direction 是 Input,Data Type numeric,Parameter name 是 0,Parameter size 是 1000。
我得到的价值必须去我有“?”的地方。在创建 tempdb 语句中。我试图让我的代码从一个随机数开始并以 1 递增。
我知道使用脚本任务可能会更容易,但该工具在我的加工中被破坏(奇怪的 dts 管道错误)。提前致谢,这一切都在 SSIS 2008 中。
【问题讨论】:
-
参数不能这样工作。您需要在字符串中的表达式中完成此操作并运行该字符串。我的机器上的脚本任务也坏了!这似乎很不可靠。
-
解决方案:在创建临时表时,保留变量中存储的随机数,并设置RecID为IDENTITY(1,1)。然后在派生列中我有@SeqVar + RecID。因此,每一行进来的 RecID 都会迭代并添加到随机数中。感谢您的所有意见,非常感谢!
标签: sql sql-server-2008 tsql ssis bids