c# – 多行使用专用表值参数更新Sql Server更新 – 存储过程

使用下面的存储过程,我可以在给定每条记录的Row索引的情况下选择表的变量部分.我尝试创建另一个类似于MulTselect的存储过程,只是这次表值参数将为MulTUpdate存储过程的新值提供另一列.

[RowIndex] int, [NewVal] [varchar] (4000) NOT NULL

问题是,给定记录 – Rowindex和“NewValue”,是否可以对多个记录进行UPDATE,如下面的选择程序?

--sproc signature

CREATE Proc [dbo].[MulTSELECTViaRowIndexSpTVP] 
@SelectedTableName varchar (50),
@SelectedAction varchar(10),
@TestMulTSELECTViaRowIndexTVPar dbo.TestMulTSELECTViaRowIndexTVType READONLY


SET @CmdStr = 'SELECT * FROM ' + @SelectedTableName + ' 
               WHERE RowIndex in (SELECT RowIndex from @TestMulTSELECTViaRowIndexTVPar);'

EXEC sp_executesql @CmdStr,N' @TestMulTSELECTViaRowIndexTVPar dbo.TestMulTSELECTViaRowIndexTVType READONLY',
         @TestMulTSELECTViaRowIndexTVPar= @TestMulTSELECTViaRowIndexTVPar
最佳答案
当我查看我的旧存储过程时,我找到一个盯着我思考正确的方法,所以这就是我要编译的,还没有经过测试.

Declare @TotalRec int = (Select COUNT(RowIndex) from @TestMulTiActMulTColIndexTVPar);
Declare @Iter int =0, @Count int =0;
While @Iter < @TotalRec
     Begin
        Declare @curRowIndex int=
                (
                    select RowIndex from
                        (select row_number() over (order by RowIndex) as RowN,
                        * from  @TestMulTiActMulTColIndexTVPar) T where T.RowN =(@Iter+1)
               );
        Declare @CurVal varchar(4000) = (Select [StrVal] from @TestMulTiActMulTColIndexTVPar WHERE RowIndex=@curRowIndex);
        SET @CmdStr = 'UPDATE ' + @SelectedSDTOName + ' SET ' + @SelectedColName + ' = ' + QUOTENAME(@CurVal, '''') + ' WHERE RowIndex = ' + CAST(@curRowIndex as nvarchar);

        EXEC sp_executesql @CmdStr,N' @TestMulTiActMulTColIndexTVPar dbo.TestMulTiActMulTColIndexTVType READONLY',
                                 @TestMulTiActMulTColIndexTVPar= @TestMulTiActMulTColIndexTVPar;
        Set @Iter = @Iter + 1;
    End

SELECT 'EffRows' = @Iter; 

这是我能用我的技能组成的最好的,
因为它迭代它分别执行每个更新命令(在while循环内)而不是select过程

SELECT * FROM ' + @SelectedTableName + ' 
           WHERE RowIndex in (SELECT RowIndex from @TestMulTSELECTViaRowIndexTVPar);'

所以我不知道它是否会像我在这里编码的那样表现最好……
任何评论都会非常欢迎.

谢谢你的时间.

转载注明原文:c# – 多行使用专用表值参数更新Sql Server更新 – 存储过程 - 代码日志