SQL使用函数的返回值作为过程参数

时间:2015-02-07 21:58:31

标签: sql function procedure

让我们来定义:

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 name=@name
    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'))

我在上面试过但没有帮助。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

这将“执行具有函数返回值的过程”

它不会'内联'

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