2015-02-07 152 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