SSI传递变量以执行sql任务(创建表参数)

SSI传递变量以执行sql任务(创建表参数),sql,sql-server-2008,tsql,ssis,bids,Sql,Sql Server 2008,Tsql,Ssis,Bids,我有一个包,其中包含两个executesql任务,后面是许多dft。第一种说法是: select CAST(floor(rand()*1000)+1 AS INT) AS 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

我有一个包,其中包含两个executesql任务,后面是许多dft。第一种说法是:

select CAST(floor(rand()*1000)+1 AS INT) AS 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   
);
并且结果集是单行的-这非常好用。它给我一个介于1和1000之间的随机数,并将该值传递给一个我称为SeqVar的变量。(我也证实了这一点)

我遇到的问题是在我的第二个执行SQL任务中,我尝试使用从第一个执行SQL teask输出的SeqVar变量作为以下语句中的参数:

select CAST(floor(rand()*1000)+1 AS INT) AS 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变量名,方向为输入,数据类型为数值,参数名为0,参数大小为1000

我得到的值必须位于create tempdb语句中的“?”处。我试图让我的代码从一个随机数开始,然后递增1


我知道使用脚本任务可能会更容易,但在我的机器上该工具坏了(奇怪的dts管道错误)。提前感谢,这一切都在SSIS 2008中。

以这种方式使用标识似乎是一个奇怪的解决方案,只需以某个随机值启动序列。参数格式为?在SQL中,绝对不能在该上下文中工作


但是,如果方法是给定的,则另一种管理方法是使用表达式设置SQL任务的整个代码,在表达式中,将值作为简单的字符串串联,然后运行生成的字符串。

最好按如下所示创建表,然后使用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)

参数不是这样工作的。您需要在字符串中的表达式中对此进行处理,然后运行字符串。脚本任务在我的机器上也被破坏了!解决方案:在创建临时表时,将随机数存储在变量中,并将RecID设置为IDENTITY(1,1)。然后在一个派生列中,我有@SeqVar+RecID。因此,每一行都会迭代RecID并添加到随机数中。感谢您的所有意见,非常感谢!