如何将列数据列表传递到存储过程中?
我的存储过程是
ALTER PROCEDURE [dbo].[Register]
@Id int,
@Name nvarchar(50)
AS
BEGIN
BEGIN TRY
INSERT INTO dbo.Group (Id, Name)
VALUES(@Id, @Name)
SELECT 0
END TRY
BEGIN CATCH
SELECT -1
END CATCH
END
GO
我想要传递这样的数据以插入到此表中
@Id = 1,2,3,4,5
@Name = 'test1,test2,test3,test4,test5'
结果像这样
Id Name
1 test1
2 test2
3 test3
4 test4
5 test5
SQL Server中的“列表”或“数组”是...表。因此,如果您使用的是SQL Server 2008或更高版本(未指定),请使用SQL Server的表值参数功能将值表传递给存储过程
-- Create a table type to match your input parameters
CREATE TYPE IdNameTable AS TABLE
( ID INT, Name NVARCHAR(50) );
GO
-- change your stored procedure to accept such a table type parameter
ALTER PROCEDURE [dbo].[Register]
@Values IdNameTable READONLY
AS
BEGIN
BEGIN TRY
INSERT INTO dbo.Group (Id, Name)
-- get the values from the table type parameter
SELECT
Id, Name
FROM
@Values
SELECT 0
END TRY
BEGIN CATCH
SELECT -1
END CATCH
END
GO
有关表值参数功能及其使用方法的更多详细信息,请参阅大量免费的 SQL Server联机丛书文档。
如果要从T-SQL使用此代码,请使用以下代码:
-- declare a variable of that table type
DECLARE @InputTable IdNameTable
-- insert values into that table variable
INSERT INTO @InputTable(ID, Name)
VALUES (1, 'Test 1'), (2, 'Test 2')
-- execute your stored procedure with this table as input parameter
EXECUTE [dbo].[Register] @InputTable
如果要从C#或VB.NET使用此功能,请参阅Michael Edenfield的注释链接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句