我有两个存储过程。第一个存储过程值在第二个存储过程中使用。所以我想将两个存储过程合并为一个。
Create procedure [carcallD]
@carid varchar(10)
as
Begin
select
t.dtime, t.locid, t.vtid
from
Transaction_tbl t
where
Tbarcode = @carid
End
如果我使用carid
413
dtime locid vtid
----------------------- ----------- -----------
2014-06-09 14:59:47 5 8
执行此操作,我会这样点出来:
ALTER procedure [dbo].[Weekend]
@wday varchar(50),
@yr varchar(50),
@vtid integer,
@locid integer
as
begin
set nocount on
DECLARE @todaysdate date
Declare @checkWeekend integer
select
@todaysdate = CONVERT(varchar(10), GETDATE(), 111)
select
@checkWeekend = Weekend
from
weekends_tbl
where
weekdays = @wday
if @checkWeekend = 1
begin
select Hamount as amount
from locvtypeassign_tbl
where vtid = @vtid and locid = @locid and active = 0
end
else
begin
if @todaysdate in (select Hdate from Pholidays_tbl where year = @yr)
begin
select Hamount as amount
from locvtypeassign_tbl
where vtid = @vtid and locid = @locid and active = 0
end
else
begin
select Namount as amount
from locvtypeassign_tbl
where vtid = @vtid and locid = @locid and active = 0
end
end
end
我的其他存储过程如下所示:
@wday =
这里使用参数
@yr =
我想从输出中传递特定的dtime日@vtid =
从我的输出中传递特定年份的dtime @locid =
从我的输出中传递vtid dtime locid vtid amount
----------------------- ----------- ----------- ---------
2014-06-09 14:59:47 5 8 100
从我的输出传递locid 那么我可以将这两个存储过程合并为一个吗?
如果有人能够帮助我,我会很感激。
提前致谢
我想得到这样的输出:
{{1}}
答案 0 :(得分:0)
您可以使用输出参数:
CREATE PROCEDURE GetImmediateManager
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END
查看此链接:
http://technet.microsoft.com/en-us/library/ms378108(v=sql.110).aspx
答案 1 :(得分:0)
试试这个
ALTER procedure [dbo].[Weekend]
@carid varchar(50)
as
begin
Declare
@wday datetime,
@yr varchar(50),
@vtid integer,
@locid integer,
@day varchar(10),
@year integer
-- taking parameter value
select @wday = t.dtime
from Transaction_tbl t where Tbarcode=@carid
set @day=datename(Weekday,@wday)
set @year=year(@wday)
set @vtid = (select t.vtid
from Transaction_tbl t where Tbarcode=@carid);
set @locid = (select t.locid
from Transaction_tbl t where Tbarcode=@carid);
set nocount on
DECLARE @todaysdate date
Declare @checkWeekend integer
select @todaysdate = CONVERT(varchar(10), GETDATE(), 111)
--End
--check current day is holiday(Weeknd)
select @checkWeekend= Weekend from weekends_tbl where weekdays=@day
if @checkWeekend= 1
begin
Select t.dtime,
k.HBarcode, m.make,t.Compl,
t.plateno,t.self,t.dtime, v.vtype, l.locname,case when l.edt is null or l.edt =0 then l.minEdt
+l.BuffrEDT else l.edt + l.BuffrEDT end as EDT, t.locid,t.vtid,t.lsttic,
c.Colname, te.UniqueName,DATEDIFF(minute,t.dtime,getdate()) as
Duration,pl.PS,pc.PlateCode,t.Paid,t.Status,t.DelDate,t.vtid,t.Locid, Hamount as amount
from Transaction_tbl t
left JOIN KHanger_tbl k ON t.transactID = k.transactID
left JOIN make_tbl m ON t.mkid = m.mkid
left join PlateSource_tbl pl on t.PSID=pl.PSID
left join PlateCode_tbl pc on t.PCdID=pc.PCdID
left JOIN vtype_tbl v ON v.vtid = t.vtid
left JOIN Location_tbl l ON t.locid = l.locid
left JOIN Color_tbl C ON t.colid = c.colid
left JOIN Terminals_tbl te ON k.tid = te.tid
left join locvtypeassign_tbl loc on t.Locid=loc.locid
where loc.vtid=@vtid and loc.locid=@locid and loc.active=0 and t.TBarcode=@carid
end
else
--Check current day belongs to any public holiday
begin
if @todaysdate in(select Hdate from Pholidays_tbl where year=@year)
begin
Select t.dtime,
k.HBarcode, m.make,t.Compl,
t.plateno,t.self,t.dtime, v.vtype, l.locname,case when l.edt is null or l.edt =0 then l.minEdt
+l.BuffrEDT else l.edt + l.BuffrEDT end as EDT, t.locid,t.vtid,t.lsttic,
c.Colname, te.UniqueName,DATEDIFF(minute,t.dtime,getdate()) as
Duration,pl.PS,pc.PlateCode,t.Paid,t.Status,t.DelDate,t.vtid,t.Locid, Hamount as amount
from Transaction_tbl t
left JOIN KHanger_tbl k ON t.transactID = k.transactID
left JOIN make_tbl m ON t.mkid = m.mkid
left join PlateSource_tbl pl on t.PSID=pl.PSID
left join PlateCode_tbl pc on t.PCdID=pc.PCdID
left JOIN vtype_tbl v ON v.vtid = t.vtid
left JOIN Location_tbl l ON t.locid = l.locid
left JOIN Color_tbl C ON t.colid = c.colid
left JOIN Terminals_tbl te ON k.tid = te.tid
left join locvtypeassign_tbl loc on t.Locid=loc.locid
where loc.vtid=@vtid and loc.locid=@locid and loc.active=0 and t.TBarcode=@carid
end
-- so calculating normal day amount
else
begin
Select t.dtime,
k.HBarcode, m.make,t.Compl,
t.plateno,t.self,t.dtime, v.vtype, l.locname,case when l.edt is null or l.edt =0 then l.minEdt
+l.BuffrEDT else l.edt + l.BuffrEDT end as EDT, t.locid,t.vtid,t.lsttic,
c.Colname, te.UniqueName,DATEDIFF(minute,t.dtime,getdate()) as
Duration,pl.PS,pc.PlateCode,t.Paid,t.Status,t.DelDate,t.vtid,t.Locid, Namount as amount
from Transaction_tbl t
left JOIN KHanger_tbl k ON t.transactID = k.transactID
left JOIN make_tbl m ON t.mkid = m.mkid
left join PlateSource_tbl pl on t.PSID=pl.PSID
left join PlateCode_tbl pc on t.PCdID=pc.PCdID
left JOIN vtype_tbl v ON v.vtid = t.vtid
left JOIN Location_tbl l ON t.locid = l.locid
left JOIN Color_tbl C ON t.colid = c.colid
left JOIN Terminals_tbl te ON k.tid = te.tid
left join locvtypeassign_tbl loc on t.Locid=loc.locid
where loc.vtid=@vtid and loc.locid=@locid and loc.active=0 and t.TBarcode=@carid
end
end
--fetching amount nd details part over---
--Checking corresponding barcde complimentry or not.if compl taking deltails
if(select COUNT(t1.Compl) from dbo.Transaction_tbl t1 where T1.TBarcode=@Carid)=1
begin
declare @compl integer =null,
@transid integer=null,
@complid integer=null
select @transid=t.transactID from dbo.Transaction_tbl t where t.TBarcode=@carid
Select @compl=co.Cmplid from dbo.ComplimentTransactAssign_tbl co where co.TransactID=@transid
select c.CompName,c1.Remarks from Complimentary_tbl c
inner join ComplimentTransactAssign_tbl c1 on c.CmplID=c1.Cmplid where c.CmplID=@compl and
c1.TransactID=@transid
end
--End Compl Checking---
declare @locatnid integer,
@location nvarchar(100)
begin
select @locatnid= t.Locid from dbo.Transaction_tbl t where t.TBarcode=@carid
select l1.StartTime,l1.EndTime from dbo.Location_tbl l1 where l1.Locid=@locatnid
end
end
答案 2 :(得分:0)
您有两个存储过程,主要目的是使用一个存储过程。既然你已经写了两篇。更改第二个过程添加@carid
,添加另一个参数@option
。如果您的选项为0,则执行第一个过程,否则执行第二个过程。
ALTER procedure [dbo].[Weekend]
@wday varchar(50),
@yr varchar(50),
@vtid integer,
@locid integer,
@option = 0,
@carid varchar(10)
as
begin
set nocount on
DECLARE @todaysdate date
Declare @checkWeekend integer
select @todaysdate = CONVERT(varchar(10), GETDATE(), 111)
select @checkWeekend= Weekend from weekends_tbl where weekdays=@wday
if @option = 1
beging
exec [carcallD] @carid
end
else
begin
if @checkWeekend= 1
begin
select Hamount as amount from locvtypeassign_tbl where
vtid=@vtid and locid=@locid and active=0
end
else
begin
if @todaysdate in(select Hdate from Pholidays_tbl where year=@yr)
begin
select Hamount as amount from locvtypeassign_tbl where
vtid=@vtid and locid=@locid and active=0
end
else
begin
select Namount as amount from locvtypeassign_tbl where
vtid=@vtid and locid=@locid and active=0
end
end
end
end
您也可以通过删除它来复制您的第一个程序并在那里复制exec。像
if @option = 1
begin
select t.dtime,t.locid,t.vtid
from Transaction_tbl t where Tbarcode=@carid
end
你希望你的第一个程序被执行,然后将@option作为1设置为所有程序。或者让它采用默认的0值来执行sec过程。