I have two stored procedures. The first stored procedure value's using in second stored procedure. So I want to combine the two stored procedures into a single one.
Create procedure [carcallD]
@carid varchar(10)
as
Begin
select
t.dtime, t.locid, t.vtid
from
Transaction_tbl t
where
Tbarcode = @carid
End
If I execute this with carid
of 413
I will get out put like this:
dtime locid vtid
----------------------- ----------- -----------
2014-06-09 14:59:47 5 8
My other stored procedure looks like this:
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
Here am using parameter
@wday =
I want to pass particular day of dtime from my output @yr =
pass particular year of dtime from my output @vtid =
pass vtid from my output @locid =
pass locid from my output So can I combine these two stored procedures into a single one?
If anyone is able to help me, I'd appreciate it.
Thanks in advance
I want to get output like this:
dtime locid vtid amount
----------------------- ----------- ----------- ---------
2014-06-09 14:59:47 5 8 100
You can use output parameteres:
CREATE PROCEDURE GetImmediateManager
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END
Get a look in this link:
http://technet.microsoft.com/en-us/library/ms378108(v=sql.110).aspx
Try this
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
You have two stored procedures, the main aim is to use one stored procedure. Since you have two written already. Alter the second procedure add the @carid
, add another parameter @option
. If your option is 0 then execute the first procedure, else execute the second.
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
You can copy your first procedure also and past in the place of exec there by eliminating it. like
if @option = 1
begin
select t.dtime,t.locid,t.vtid
from Transaction_tbl t where Tbarcode=@carid
end
where ever you want your first procedure to be executed, then set pass @option as 1 to the procedure that's all. OR leave it to assume the default 0 value to execute the sec procedure.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.