Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
Sql server 如何在SQL Server 2012的结果表中动态添加包含空数据的行?_Sql Server - Fatal编程技术网

Sql server 如何在SQL Server 2012的结果表中动态添加包含空数据的行?

Sql server 如何在SQL Server 2012的结果表中动态添加包含空数据的行?,sql-server,Sql Server,我有这张桌子,上面有22行 我得到了一张如上所述的转换表 为了得到结果表,我创建了以下过程 ALTER PROCEDURE [dbo].[proc_YS_BAB_IR_Item] @UserId int AS BEGIN TRAN DECLARE @SqlQry NVARCHAR(MAX); SET @SqlQry = N'' DECLARE @Cnt INT = 1, @EndCnt INT = 25, @v_UserId INT

我有这张桌子,上面有22行

我得到了一张如上所述的转换表

为了得到结果表,我创建了以下过程

ALTER PROCEDURE [dbo].[proc_YS_BAB_IR_Item] 
    @UserId int
AS
BEGIN TRAN
    DECLARE @SqlQry NVARCHAR(MAX);
    SET @SqlQry = N''

    DECLARE @Cnt INT = 1, @EndCnt INT = 25,
            @v_UserId INT = CAST(@UserId AS VARCHAR(MAX));

    CREATE TABLE #TempColumns 
    (
        Calculate_ItemIdentifier VARCHAR(MAX), 
        SeqOrder INT
    )

    WHILE @cnt <= @EndCnt
    BEGIN
        INSERT INTO #TempColumns
            SELECT 
                'IR'+ CAST(@Cnt AS VARCHAR(MAX)),
                @Cnt

        SET @Cnt = @Cnt + 1;
    END

    DECLARE @DATA VARCHAR(10), @DATA1 VARCHAR(10) = '000000'
    DECLARE @zero_str VARCHAR(6) = '000000'

    -- Generate table alike to yours    
    DECLARE @yourTable TABLE ([value] varchar(max))

    -- convert array to xml
    ;WITH cte AS 
    (
        SELECT  
            ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn,
            [response],
            CAST('<a>'+REPLACE(SUBSTRING([response],2,LEN([response]) - 2),',','</a><a>')+'</a>' as xml) AS x,
            @v_UserId AS UserId,
            [item_identifier]
        FROM  
            #TempColumns 
        LEFT JOIN 
            YS_BAB_response_dump ON YS_BAB_response_dump.Item_Identifier = #TempColumns.Calculate_ItemIdentifier
                                 AND UserId = CAST(@UserId AS VARCHAR(MAX)) 
                                 AND TestModel = 'IR'
    )
    -- do the stuff
    SELECT  
        c.rn,
        c.[response],
        c.[item_identifier],
        RIGHT(@zero_str + 
CAST(SUM(CAST(STUFF(@zero_str,t.c.value('.','tinyint')+1,1,'1') AS INT)) AS VARCHAR(6)), 6) AS ans,
        c.UserId
    FROM 
        cte c
    CROSS APPLY 
        x.nodes('/a') AS t(c)
    GROUP BY 
        c.rn, c.[response], c.UserId, c.[Item_Identifier]
    ORDER BY
        c.rn 

COMMIT TRAN    
ALTER过程[dbo]。[proc_YS_BAB_IR_Item]
@用户ID int
作为
开始训练
声明@SqlQry NVARCHAR(最大值);
设置@SqlQry=N“”
声明@Cnt INT=1,@EndCnt INT=25,
@v_UserId INT=CAST(@UserId作为VARCHAR(MAX));
创建表#临时列
(
计算_ItemIdentifier VARCHAR(最大值),
顺序整数
)

而@cnt你就快到了。使用
外部应用
而不是
交叉应用

首先,您需要一个列出所有内容的表-一个包含IR1到IR24的表,包括IR22等。然后,您需要外部连接现有的dataset@Nick.McDermaid-我没有更改第一个原始表的权限。您如何知道IR22存在?这些东西的清单应该放在某个表格里。如果不是,你怎么知道它停在IR24?@Nick.McDermaid-我用测试模型IR和UserId过滤该表。所以我把这个列表升级到了IR24。修复要求是,我必须在结果表中添加用户ID为NULL dataYes的IR1到IR25之间缺少的列,要做到这一点,您需要一个应该存在的所有IR的列表。看起来您应该在
#TempColumns
中已经有了完整的列表。您可能需要使用
外部应用
而不是
交叉应用