2015-02-07 151 views
-1

讓我們來定義:SQL使用返回值

create table cities 
(
    ID int identity, 
    name varchar(50) unique 
) 


create function getID (@name varchar(50)) returns int 
begin 
    declare @id int 
    select @id=ID from cities where [email protected] 
    return @id 
end 

create procedure addLine 
    @cityID int 
as begin 
    ... 
end 

是否有可能執行與函數返回值的過程,如下所示?

exec addLine getID('Warsaw') 
exec addLine dbo.getID('Warsaw') 
exec addLine (select dbo.getID('Warsaw')) 

我上面試過,它沒有幫助。

+0

它不起作用?你使用了一個逐步調試器嗎? – Dai 2015-02-07 22:00:44

+0

老實說,我從來沒有使用它,所以我不知道該怎麼做,我會嘗試找到該選項 – user3162968 2015-02-07 22:04:04

回答

2

微軟說這是不可能的。你可以不通過結果的函數來程序作爲一個參數:

[ { EXEC | EXECUTE } ] 
    { 
     ... 
     [ [ @parameter = ] { value 
          | @variable [ OUTPUT ] 
          | [ DEFAULT ] 
          } 
     ] 
     ... 
    } 
[;] 

所以,唯一不變的值,變量,DEFAULT關鍵字是允許的。這樣做的 2可能的方式是:

1:聲明變量

declare @i int = dbo.getID('Warsaw') 
exec addLine @i 

2:使用動態查詢

DECLARE @cmd NVARCHAR(MAX) = 'exec addLine ' + CAST(dbo.getID('Warsaw') AS NVARCHAR(MAX)) 
EXEC(@cmd) 
0

這將 「與值執行一個過程由函數返回」

它只是不會'內聯'

declare @id int 
select @id = dbo.getID('Warsaw') 
exec addLine @id