2014-07-27 19 views
5

Làm cách nào để chuyển danh sách dữ liệu cột vào một thủ tục được lưu trữ?Chèn danh sách các giá trị vào một bảng SQL Server với thủ tục đã lưu

thủ tục lưu trữ của tôi là

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 

Tôi muốn vượt qua như các dữ liệu này để chèn vào bảng này

@Id = 1,2,3,4,5 
@Name = 'test1,test2,test3,test4,test5' 

và kết quả như

Id Name 
1 test1 
2 test2 
3 test3 
4 test4 
5 test5 

Trả lời

8

Một "danh sách" này hay " mảng "trong SQL Server là ..... một bảng. Vì vậy, nếu bạn đang ở trên SQL Server 2008 hoặc mới hơn (bạn không ghi rõ), sau đó sử dụng các tham số bảng giá trị tính năng của SQL Server để vượt qua một bảng giá trị đối với thủ tục lưu trữ của bạn

-- 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 

Xem rộng rãi và tự do có sẵnSQL Server Books Online documentation để biết thêm chi tiết về các tính năng thông số bảng giá trị và cách sử dụng nó

Nếu bạn muốn sử dụng này từ T-SQL, sử dụng mã này:

-- 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 

Nếu bạn muốn sử dụng điều này từ C# hoặc VB.NET, hãy xem liên kết của Michael Edenfield trong phần bình luận.

+1

http://msdn.microsoft.com/en-us/library/bb675163(v=vs.110).aspx để biết cách sử dụng chúng từ C# –

+0

Sẽ hữu ích nếu bạn cập nhật cách chuyển dữ liệu để tham số thủ tục ... – Jesuraja

+0

@marc_s cảm ơn veryyyy veryyy, nhưng một questio. làm thế nào tôi sử dụng thủ tục lưu trữ exec? vượt qua giá trị? sau khi tôi chạy thủ tục được lưu trữ này, và muốn thay đổi nó tôi nhận được lỗi này, ông loại 'IdNameTable' đã tồn tại, hoặc bạn không có quyền để tạo ra nó. hãy giúp tôi –

Các vấn đề liên quan