2013-07-24 54 views
0

我已存儲過程是這樣的:mergin一個存儲過程到另一個SQL

ALTER procedure [dbo].[fetchkey] 
@carid nvarchar(50) =null 
as 
begin 
select t.TBarcode,t.Status 
from Transaction_tbl t 
where [email protected] 
end 

我的輸出:

TBarcode    Status 
51891044554   1 

我想展示一個更加列取決於我status.so我又寫道一個功能是這樣的:

ALTER function [dbo].[keyloc](@status numeric(18,0)) RETURNS varchar(50) 
as 
begin 
declare 
@keylocation Varchar(50) 
if @status=1 
select @keylocation= e1.Ename from Transaction_tbl t left join EmployeeMaster_tbl e1 
ON e1.ECode = t.ECode AND t.Status = 1 or e1.Ecode=t.DelEcode and t.Status=4 
return @keylocation 
end 

然後我試圖執行這樣我的存儲過程:

ALTER procedure [dbo].[fetchkey] 
@carid nvarchar(50) =null 
as 
begin 
select t.TBarcode,[dbo].[keyloc](t.Status) 
from Transaction_tbl t 
where [email protected] 
end 

,但我的輸出越來越錯誤:

TBarcode    
51891044554   Null 

什麼是錯我的代碼?我的預期輸出是這樣的:

TBarcode    Status key location 
51891044554   1  Raheem. 

我該怎麼辦?

回答

0

問題是,你做你的功能左連接,試試這個:

select @keylocation= e1.Ename 
from Transaction_tbl t 
join EmployeeMaster_tbl e1 
ON e1.ECode = t.ECode AND t.Status = 1 
or e1.Ecode=t.DelEcode and t.Status=4 
0

在您更改的過程中,您忘記了(?)以包含狀態字段,這是它未包含的原因。這:

select t.TBarcode,[dbo].[keyloc](t.Status) 

應該是:

select t.TBarcode, t.Status, [dbo].[keyloc](t.Status) as 'Key location' 

,如果你想爲Status太一列和Key location

標題爲什麼你的函數返回null我真的不能說,是數據正確嗎?你有沒有嘗試單獨執行它,看看它是否會返回預期的輸出?這可能是因爲函數中的WHERE子句以錯誤的方式進行評估。嘗試通過將謂詞放在括號中來使評估更加明確,例如:

ON (e1.ECode = t.ECode AND t.Status = 1) or (e1.Ecode=t.DelEcode and t.Status=4) 

如果這是應該評估的方式。

另外,Status的值真的是numeric(18,0)的值,如果不是,您可能需要將函數參數更改爲更合適的值(如smallint或int)。

+0

先生我的數據correct.but我得到關鍵位置表是空 – user2603688

+0

我出去把。我改變了左連接現在加入進來了 – user2603688

相關問題