让我们来定义:
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'))
我在上面试过但没有帮助。
答案 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