簡體   English   中英

如何將數字數組傳遞給存儲過程?

[英]How to pass an array of numbers to a stored procedure?

我想編寫一個存儲過程,該過程可以接收一個或多個員工ID,並根據這些ID返回數據。 每次調用該存儲過程時,員工ID的數量都會變化。

如何編寫存儲過程以返回傳入的每個員工ID的分支地址,其中員工ID的數量是可變的?

員工表

  • ID
  • 名稱
  • Branch_ID

分支表

  • ID
  • 名稱
  • 地址

如果您運行的是SQL 2008或更高版本,則建議使用表類型。 然后,您可以將表傳遞給存儲過程。 這是我做的一個小例子來說明這一點。

create database tmpDB;
go

use tmpDB;
go

create table tblEmployee
    (
     ID int identity(1, 1)
            primary key
            not null,
     Name nvarchar(200),
     Branch_ID int
    );
go    

insert  into dbo.tblEmployee
        (Name, Branch_ID)
values  (N'Brian', 1),
        (N'Mary', 1),
        (N'Peter', 2),
        (N'Sonya', 2),
        (N'Roland', 1),
        (N'Tom', 3),
        (N'Sam', 3),
        (N'Ryan', 3),
        (N'Julia', 3),
        (N'Tim', 1),
        (N'Eva', 2); 
go        


select  *
from    dbo.tblEmployee;
go

create type typEmployee as table
(
Name nvarchar(200),
BranchID int
);
go

grant exec on type::typEmployee to public;
go

create procedure spInsertEmployees
    (
     @NewEmployees typEmployee readonly
    )
as
    begin
        merge tblEmployee as target
        using
            (
             select Name,
                    BranchID
             from   @NewEmployees
            ) as source (Name, BranchID)
        on (
            target.Name = source.Name
            and target.Branch_ID = source.BranchID
           )
        when not matched then
            insert (Name, Branch_ID)
            values (
                    source.Name,
                    source.BranchID
                   );
    end;
go

grant execute on spInsertEmployees to public;
go

declare @tmpTable typEmployee;
insert  into @tmpTable
        (Name, BranchID)
values  (N'NewEmployee', 1),
        (N'NewEmployee', 2),
        (N'NewEmployee', 3),
        (N'Sonya', 2),
        (N'Tim', 1);

exec dbo.spInsertEmployees
    @NewEmployees = @tmpTable;


select  *
from    dbo.tblEmployee;
go

use master;
go

drop database tmpDB;
go

我們要做的只是傳遞一個分隔列表。 因此1,2,3,42,55,6666與nvarchar(max)。

然后,我們有一個用戶定義的函數,該函數返回一個表,然后在該表上進行聯接。

Google使用定界符搜索t sql拆分字符串,您將找到示例。

從dbo.udfSplit(@inputfromparameters,“,”)內部聯接中選擇*。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM