我有一个包,其中包含两个执行sql任务,后跟多个DFT。第一个是声明:
select CAST(floor(rand()*1000)+1 AS INT) AS SeqVar
并且具有ResultSet单行 - 这非常有效。它给出了1到1000之间的随机数,并将该值传递给我称为SeqVar的变量。 (我也证实这有效)
我遇到的问题是在我的第二次执行SQL任务中,我尝试使用从第一个执行SQL teask输出的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是数字,参数名是0,参数大小是1000。
我得到的价值必须放在我拥有"?"在create tempdb语句中。我试图让我的代码以随机数开始并递增1。
我知道使用脚本任务可能会更容易,但是我的工具(奇怪的dts管道错误)会破坏该工具。在此先感谢,这一切都在SSIS 2008中。
答案 0 :(得分:0)
以这种方式使用身份似乎是一个奇怪的解决方案,只是为了以某个随机值启动一个序列。参数格式为?绝对不会在SQL的上下文中工作。
但是,管理此方法的另一种方法是,如果方法是给定的,则使用表达式设置SQL任务的整个代码,在该表达式中将值作为简单字符串并置,然后运行生成的字符串。 / p>
答案 1 :(得分:0)
最好像下面那样创建表,然后使用RESEED属性将其设置为随机变量值'
IF OBJECT_ID('tempdb.dbo.[##temp1]') IS NOT NULL
DROP TABLE [##temp1]
CREATE TABLE [##temp1] (
[RecID] int IDENTITY(1,1),
[Name] VARCHAR(30),
[ABA] VARCHAR(10),
[Account] VARCHAR(20),
[Type] VARCHAR(1),
[Date] date,
[Amount] money
);
DECLARE @RANDOM_VALUE INT = 50
DBCC CHECKIDENT('##TEMP1',RESEED,@RANDOM_VALUE)