在sql函数中声明变量

Ami*_*mit 7 sql sql-server-2005

我有一个sql函数,我需要在该函数中声明几个变量.请告诉我如何实现这一目标.

例如,我需要把 - >

Declare @ClientResult TABLE(
        RowIndex int identity(1,1),
        SplitText varchar(50) 
    )  
Run Code Online (Sandbox Code Playgroud)

在下面的功能.

create FUNCTION [dbo].CLIENT_SHIPPINGREPORTDATA_Function_Test  
(                    
 @CLIENTPK_NEW TABLE,
 @CGNEEPK TABLE
 @type varchar(100)              
)                 
RETURNS TABLE                    
AS              

RETURN                 

SELECT   distinct              
OP_PartNum,            
OP_PK       
FROM Client_whsPallet pallet                 
Run Code Online (Sandbox Code Playgroud)

我正在使用sql server 2005

谢谢

Ada*_*Dev 6

你所追求的是一个多语句表函数

例如

CREATE FUNCTION dbo.fxnExample (@Param INTEGER)
RETURNS @Results TABLE(FieldA VARCHAR(50))
AS
BEGIN
INSERT @Results
SELECT SomeField
FROM Somewhere 
WHERE ParamField = @Param

RETURN
END
Run Code Online (Sandbox Code Playgroud)

这与您当前的函数(称为"内联表值函数")不同,您应该注意这些差异,因为如果切换到多语句方法,这可能会导致性能问题.我的建议是尽可能尝试使用内联表值函数.我建议你查看这些详细介绍的文章:

多语句表值函数与内联表值函数
http://blogs.msdn.com/b/psssql/archive/2010/10/28/query-performance-and-multi-statement-table-valued-functions.aspx
http://sqlbits.com/Agenda/event6/High_performance_functions/default.aspx


Jus*_*sel 5

在SQL Server中,您无法在内联表 - 值函数内声明变量.如果确实需要在其中声明变量,则需要创建一个多语句表值函数.你会做这样的事情:

CREATE FUNCTION [dbo].CLIENT_SHIPPINGREPORTDATA_Function_Test
(
    @CLIENTPK_NEW TABLE, @CGNEEPK TABLE @type varchar(100)
)
RETURNS @output TABLE (OP_PartNum int, OP_PK int)
AS BEGIN

Declare @ClientResult TABLE( RowIndex int identity(1,1), SplitText varchar(50) ) 

/* more code here */

RETURN
END
Run Code Online (Sandbox Code Playgroud)

不知道你正在尝试做什么,我会看到是否有使用多语句功能,但你会看到性能下降.


Ant*_*ull 5

比较这些等效的代码示例。它们显示了内联和多语句表值函数之间的语法差异。

CREATE FUNCTION [dbo].Inline (@type varchar(100))
RETURNS TABLE
AS
RETURN
    SELECT distinct name
    FROM sysobjects
    WHERE type = @type
GO

CREATE FUNCTION [dbo].Multistatement (@type varchar(100))
RETURNS @results TABLE (name sysname)
AS
BEGIN
    INSERT @results (name)
    SELECT distinct name
    FROM sysobjects
    WHERE type = @type

    RETURN
END
Run Code Online (Sandbox Code Playgroud)