【问题标题】:SSIS passing a variable to execute sql task (create table parameter)SSIS传递变量执行sql任务(创建表参数)
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-28
      • 2023-03-11
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      相关资源
      最近更新 更多