SQL 使用 return 函数值作为过程参数
SQL use return value of function as procedure parameter
让我们定义:
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'))
我上面试过了,没有用。
Microsoft 表示这是不可能的。您不能将函数的结果作为参数传递给过程:
[ { 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)
这将 "execute a procedure with value returned by function"
就是不行'inline'
declare @id int
select @id = dbo.getID('Warsaw')
exec addLine @id
让我们定义:
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'))
我上面试过了,没有用。
Microsoft 表示这是不可能的。您不能将函数的结果作为参数传递给过程:
[ { 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)
这将 "execute a procedure with value returned by function"
就是不行'inline'
declare @id int
select @id = dbo.getID('Warsaw')
exec addLine @id