簡體   English   中英

如何使用SQL Server從具有多個select語句的存儲過程中獲取一個數據表

[英]How to get one data table from Stored procedure that has multiple select statements using sql server

我的存儲過程中有兩個select語句:

 alter proc multiple

 select * from table-one
 select * from table-two

現在如何僅通過執行存儲過程來獲取表一的數據?

您可以傳遞輸入變量並使用if語句。 例如:

ALTER PROCEDURE multiple
@choice INT
AS
BEGIN
   IF (@choice = 1)
   BEGIN
      SELECT * FROM Table1
   END
   IF (@choice = 2)
   BEGIN
      SELECT * FROM Table2
   END
   IF (@choice = 3)
   BEGIN
      SELECT * FROM Table1
      SELECT * FROM Table2
   END
END

並執行程序:

EXECUTE multiple @choice = 1 -- to use 1st select

EXECUTE multiple @choice = 2 -- to use 2st select

EXECUTE multiple @choice = 3 -- to use both selects

您可以使用TEMP表將所有結果填充到temp表中。

如果您有3個表名tab_1,tab_2,tab_3,則創建一個臨時表,其中臨時表的最大列為這些表(tab_1,tab_2,tab_3),並向臨時表添加一個額外的列,以從表中識別數據。

tab_1(id bigint,name varchar(50))

tab_2(id bigint,email varchar(50))

tab_3(id bigint,address varchar(50),phone varchar(50))

那么你的臨時表應該是這樣的

#tmp(col1 bigint(),col2 varchar(50),col3 varchar(50),from_table varchar(50))

例如

create table tab_1
(
  id bigint identity(1,1),
  name varchar(50),
  email varchar(50)
  )

  insert into tab_1(name,email) values
  ('a','a@mail.com'),  ('b','c@mail.com'),
    ('a1','a1@mail.com'),  ('a2','a2@mail.com'),
      ('a3','a3@mail.com'),  ('a4','a4@mail.com'),
      ('b1','b1@mail.com'),('b2','b2@mail.com')


     create table tab_2
(
  id bigint identity(1,1),
  name varchar(50),
  email varchar(50),
  amount decimal(18,2)

  ) 
    insert into tab_2(name,email,amount) values
  ('a','a@mail.com',12.5),  ('b','c@mail.com',11.6),
    ('a1','a1@mail.com',11.7),  ('a2','a2@mail.com',88.9),
      ('a3','a3@mail.com',90),  ('a4','a4@mail.com',45),
      ('b1','b1@mail.com',78),('b2','b2@mail.com',88)

Sp應該像

create table #tab(col1 bigint,
col2 varchar(50),
col3 varchar(50),col4 varchar(50),table_from varchar(50))

insert into #tab(col1,col2,col3,table_from) 
select id,name,email,'table_1' from tab_1

insert into #tab(col1,col2,col3,col4,table_from) 
select id,name,email,amount,'table_2' from tab_2

select * from #tab

現場演示

暫無
暫無

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

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