2

那么如何declare @tempVar varchar(max)在用户声明的函数中声明一个临时局部变量?我在这里试图解决的实际问题是在用户定义的存储函数中声明和使用变量。我这样声明我的函数:

create function someFunction(@someParam varchar(100))
returns table
as 
return (
    declare @tempvar varchar(100)
    set @tempvar = ''--Set the var to something useful
    select * from sometable where somecolumn = (
        select top 1 someColumn
        from sometable
        where somecolumn = @tempvar
    )
)

服务器抱怨在错误的地方声明了变量。我应该在哪里像这样在 UDF 中声明我的变量?

4

2 回答 2

5

您正在创建一个内联表值函数,这种函数必须只包含一个SELECT语句。

如果你想使用变量,你必须创建一个Multi-statement Table-valued Function。您的函数将被声明为:

create function someFunction(@someParam varchar(100))
returns @table (field1 type, field2 type, ...)
as 
begin
    declare @tempvar varchar(100)
    set @tempvar = ''--Set the var to something useful
    insert @table
    select * from sometable where somecolumn = (
        select top 1 someColumn
        from sometable
        where somecolumn = @tempvar
    )
    return
end
于 2014-07-02T11:44:38.770 回答
1

如果你想保持表函数内联,你可以使用一个通用的表表达式来定义你的变量,如下所示:

create function someFunction(@someParam varchar(100))
returns table
as 
return (
  WITH cte (tempvar) AS
    (
    SELECT '' -- Set the var to something useful
    )
    select * from sometable where somecolumn = (
        select top 1 someColumn
        from sometable
          JOIN cte ON 1=1
        where somecolumn = cte.tempvar
    )
)
于 2019-10-14T16:13:02.660 回答