SQL 不使用循环/游标的多保存
SQL multi save without using loop/ cursor
我有一个要求,我需要从一个 int[] 字符串中将这个数组的所有值插入到数据库中。
我试过这个解决方案,效果很好。
为了实现这一点,我在 C# 中将 int[] 转换为 XML,在 SP 中使用此 XML 变量填充 table 变量并循环此 table 变量做插入。
有没有办法避免 while 循环并将多个值 逗号分隔的字符串插入 table?
下面是代码:
DECLARE @CatTable TABLE(RowID int not null primary key identity(1,1), ID int)
DECLARE @RowsToProcess int
DECLARE @CurrentRow int
INSERT INTO @Table
SELECT tbl.colname.value('text()[1]','int') AS Id
FROM @IdsList.nodes('/List/CIds') tbl(colname);
SET @RowsToProcess=@@ROWCOUNT
SET @CurrentRow=0
WHILE @CurrentRow<@RowsToProcess --- **How to avoid this loop and do the insert ?**
BEGIN
SET @CurrentRow=@CurrentRow+1
INSERT INTO tblRealtable (id, anotherId)
SELECT ID ,@AnotherID FROM @Table
WHERE RowID=@CurrentRow
END
enD
END
你不就是在追这个吗?
INSERT INTO dbo.tblRealtable (id, anotherId)
SELECT tbl.colname.value('text()[1]','int') AS Id
@AnotherID
FROM @IdsList.nodes('/List/CIds') tbl(colname);
我有一个要求,我需要从一个 int[] 字符串中将这个数组的所有值插入到数据库中。 我试过这个解决方案,效果很好。
为了实现这一点,我在 C# 中将 int[] 转换为 XML,在 SP 中使用此 XML 变量填充 table 变量并循环此 table 变量做插入。
有没有办法避免 while 循环并将多个值 逗号分隔的字符串插入 table?
下面是代码:
DECLARE @CatTable TABLE(RowID int not null primary key identity(1,1), ID int)
DECLARE @RowsToProcess int
DECLARE @CurrentRow int
INSERT INTO @Table
SELECT tbl.colname.value('text()[1]','int') AS Id
FROM @IdsList.nodes('/List/CIds') tbl(colname);
SET @RowsToProcess=@@ROWCOUNT
SET @CurrentRow=0
WHILE @CurrentRow<@RowsToProcess --- **How to avoid this loop and do the insert ?**
BEGIN
SET @CurrentRow=@CurrentRow+1
INSERT INTO tblRealtable (id, anotherId)
SELECT ID ,@AnotherID FROM @Table
WHERE RowID=@CurrentRow
END
enD
END
你不就是在追这个吗?
INSERT INTO dbo.tblRealtable (id, anotherId)
SELECT tbl.colname.value('text()[1]','int') AS Id
@AnotherID
FROM @IdsList.nodes('/List/CIds') tbl(colname);