使用存储过程将值列表插入到SQL Server表中

本文关键字:SQL Server 表中 插入 列表 存储过程 | 更新日期: 2023-09-27 18:15:17

如何将列数据列表传递到存储过程中?

存储过程是

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中的"list"或"array"为.....表一个。因此,如果你在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 Books Online文档,了解更多关于表值参数特性和如何使用它的详细信息

如果你想在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中使用它。