SSIS传递一个变量来执行sql任务(创建表参数)

时间:2015-11-16 20:52:43

标签: sql sql-server-2008 tsql ssis bids

我有一个包,其中包含两个执行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中。

2 个答案:

答案 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)