Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想在SSIS脚本任务中使用这个游标,使用C#,直到所有记录都被解析_C#_Sql_Sql Server_Ssis - Fatal编程技术网

我想在SSIS脚本任务中使用这个游标,使用C#,直到所有记录都被解析

我想在SSIS脚本任务中使用这个游标,使用C#,直到所有记录都被解析,c#,sql,sql-server,ssis,C#,Sql,Sql Server,Ssis,我想使用这个游标来解析一个表中的记录,这个表只有一列,一条记录由13行组成。我使用上面的光标手动执行,但现在我希望它从ssis脚本任务运行。直到所有记录都被解析 谢谢您……没有理由将其编入脚本(任务或组件) 你在干什么?您正在从一个表中删除前13行,并将结果连接在一起,以插入另一个表中。这件事已经被掩盖到了死亡的地步 将执行SQL任务添加到SSIS包中 这是我的桌子 DECLARE @Line1 VARCHAR (MAX) DECLARE @Con_Line1 VARCHAR (MAX) D

我想使用这个游标来解析一个表中的记录,这个表只有一列,一条记录由13行组成。我使用上面的光标手动执行,但现在我希望它从ssis脚本任务运行。直到所有记录都被解析


谢谢您……

没有理由将其编入脚本(任务或组件)

你在干什么?您正在从一个表中删除前13行,并将结果连接在一起,以插入另一个表中。这件事已经被掩盖到了死亡的地步

将执行SQL任务添加到SSIS包中

这是我的桌子

DECLARE @Line1 VARCHAR (MAX) 
DECLARE @Con_Line1 VARCHAR (MAX) 
DECLARE Pointer CURSOR FOR 
  SELECT TOP 13 Lines 
  FROM   dbo.Stage_Trdrev_TD 

OPEN Pointer 

FETCH NEXT FROM Pointer INTO @Line1 

WHILE @@FETCH_STATUS = 0 
  BEGIN 
      SET @Con_Line1 = ISNULL(@Con_Line1, ''+'01') 
                       + ISNULL (SUBSTRING(@Line1, 3, 101) + ' ', '') 

      FETCH NEXT FROM Pointer INTO @Line1 
  END 

SELECT LEFT(@Con_Line1, LEN(@Con_Line1) - 1) AS [Line] 

INSERT INTO Parse_Date_TD 
VALUES      (@Con_Line1) 

CLOSE Pointer 

DEALLOCATE Pointer

WITH D 
     AS (SELECT TOP 13 * 
         FROM   dbo.[Stage_Trdrev_TD]) 
DELETE FROM D 
这是实际工作。我创建一个临时表来保存删除的行。这些被删除的行被连接成一行,然后我将其放入已解析的表中

CREATE TABLE 
    dbo.Stage_Trdrev_TD
(
    Lines varchar(100)
);

CREATE TABLE 
    dbo.Parse_Date_TD 
(
    Lines varchar(8000)
);

INSERT INTO 
    dbo.Stage_Trdrev_TD
SELECT
    V.name
FROM
    master.dbo.spt_values AS V;

注意,如果你的源数据中有空缺,你会得到坏的结果。< /P>请格式化你的代码并解释你的问题,考虑用缩短没有<代码>顺序的标题。你知道这是一个任意的13个记录集,并且在所有可能的情况下,你删除的13个不是你操作的13个。为什么不研究一下如何使用脚本转换并发布一些框架代码呢。最后。。。。你为什么要转换它?这个代码有问题吗?将数据库代码留在数据库中有很多很好的理由。我测试了这些代码,它运行良好。转换为脚本的原因是在ssis包中使用它,因为我希望它一直运行,直到所有记录都被解析,并且可以有n个记录,并且我不希望它手动运行。@ElectricLlama是正确的-top是任意的,没有ORDER BY子句。您在测试中可能会很幸运,但每次执行都无法保证。对于此任务的执行,请使用Execute SQL任务,该任务旨在执行ssis包中的数据库代码。我强烈建议您添加一个ORDER BY。否则,它会在你最不经意的时候破裂,造成严重破坏。在这种情况下,当您随机删除不正确的记录时会发生什么?更糟的是,如果有人在进程中间插入记录,将会发生什么。

------------------
-- Now the "magic"
-------------

DECLARE
    @tbl TABLE
(
    lines varchar(100)
);

-- Tops without order is nuts
DELETE TOP (13) S
OUTPUT 
    DELETED.lines
INTO
    @tbl
FROM 
    dbo.Stage_Trdrev_TD AS S

-- Show the data before
SELECT * 
FROM @tbl T


-- Show what's about to go in
SELECT DISTINCT 
    STUFF
    (
        (
            SELECT 
                ',' + T.lines
            FROM 
                @tbl Ti
            FOR XML PATH('')
        )
        ,1
        ,1
        ,''
    ) AS ConcatenatedLines

FROM 
    @tbl T

-- Actually put it in

INSERT INTO
    dbo.Parse_Date_TD
SELECT DISTINCT 
    STUFF
    (
        (
            SELECT 
                ',' + T.lines
            FROM 
                @tbl Ti
            FOR XML PATH('')
        )
        ,1
        ,1
        ,''
    ) AS ConcatenatedLines

FROM 
    @tbl T;