在表值函数中声明变量

问题描述 投票:0回答:2

如何在表值函数中声明变量?

sql-server function user-defined-functions declare table-functions
2个回答
253
投票

表值函数有两种风格。一种只是一条 select 语句,另一种可以比一条 select 语句包含更多行。

这不能有变量:

create function Func() returns table
as
return
select 10 as ColName

你必须这样做:

create function Func()
returns @T table(ColName int)
as
begin
  declare @Var int
  set @Var = 10
  insert into @T(ColName) values (@Var)
  return
end

1
投票

在 SQL Server 中:

这不是一个非常好的解决方案,但是如果您有充分的理由需要使用内联 TVF 而不是 MSTVF 并且无法将变量作为参数传递到 TVF,但可以使用 SELECT 语句获取它,您可以使用一个 CTE 来访问该值,如下所示:

CREATE FUNCTION func()
RETURNS TABLE
AS 
RETURN
(
-- Create a CTE table containing just the required value
WITH cte_myVar AS
   (SELECT <statement to select variable>) col1

-- Use the value by selecting it from the CTE table
SELECT * FROM table1 t1
WHERE t1.col1 = (SELECT col1 FROM cte_myVar)

)


© www.soinside.com 2019 - 2024. All rights reserved.