SQL Server 2008表变量错误:必须声明标量变量"@“结果”;
我第一次在SQLServer2008中将表值用作函数的参数。下面的代码会产生此错误: 必须声明标量变量“@RESULT” 为什么?!我在函数的第一行声明它SQL Server 2008表变量错误:必须声明标量变量"@“结果”;,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我第一次在SQLServer2008中将表值用作函数的参数。下面的代码会产生此错误: 必须声明标量变量“@RESULT” 为什么?!我在函数的第一行声明它 ALTER FUNCTION f_Get_Total_Amount_Due( @CUSTOMER_LIST [tpCSFM_CUSTOMER_SET_FOR_MONEY] READONLY ) RETURNS [tpCSFM_CUSTOMER_SET_FOR_MONEY] AS
ALTER FUNCTION f_Get_Total_Amount_Due(
@CUSTOMER_LIST [tpCSFM_CUSTOMER_SET_FOR_MONEY] READONLY
)
RETURNS [tpCSFM_CUSTOMER_SET_FOR_MONEY]
AS
BEGIN
--Prepare the return value, start with initial customer list
DECLARE @RESULT AS [tpCSFM_CUSTOMER_SET_FOR_MONEY]
INSERT INTO @RESULT SELECT * FROM @CUSTOMER_LIST
--Todo: populate with real values
UPDATE @RESULT SET tpCSAM_MONEY_VALUE = 100
--return total amounts as currency
RETURN @RESULT
END
使返回值能够是用户定义的表类型
但是,您可以尝试:返回@RESULT[tpCSFM\u CUSTOMER\u SET\u FOR\u MONEY]并删除单独的声明
当我有机会设置测试用例时,我需要检查它。您的声明将属于“多语句表值函数”情况:
Multistatement Table-valued Functions
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] [READONLY] }
[ ,...n ]
]
)
RETURNS @return_variable TABLE <table_type_definition>
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
[ ; ]
多状态表值函数
创建函数[schema_name.]FUNCTION_name
([{@parameter\u name[AS][type\u schema\u name.]parameter\u data\u type
[=默认值][只读]}
[,…n]
]
)
返回@return\u变量表
[与[,…n]]
[作为]
开始
功能体
回来
终止
[ ; ]
遗憾的是@return\u变量不能声明为表类型,您必须将TVP类型的声明复制到函数return table type中。这一个编译很好:
--Returns the name of the field to use to find results
ALTER FUNCTION f_Get_Total_Amount_Due(
@CUSTOMER_LIST [tpCSFM_CUSTOMER_SET_FOR_MONEY] READONLY
)
RETURNS @RESULT TABLE(
tpCSFM_CUS_ID uniqueidentifier PRIMARY KEY,
tpCSFM_MONEY_VALUE MONEY NULL
)
AS
BEGIN
--Prepare the return value, start with initial customer list
INSERT INTO @RESULT SELECT * FROM @CUSTOMER_LIST
--Todo: populate with real values
UPDATE @RESULT SET tpCSFM_MONEY_VALUE = 100
--return total amounts as currency
RETURN
END
什么是
[tpCSFM\u CUSTOMER\u SET\u FOR\u MONEY]
?我已经在数据库中创建了一个自定义类型您知道自定义类型通常是个坏主意吗?它们会导致巨大的维护问题?我会避免使用它们!来自联机丛书:“要修改用户定义的类型,必须使用drop type语句删除该类型,然后重新创建它。”这意味着您需要先将使用该类型的所有数据更改为另一类型,然后删除该类型,再创建新类型,然后将所有要使用该数据类型的字段更改回新类型。这是一场维护噩梦,据我所知,管理大型数据库的人都不会允许使用自定义类型。我确实注意到,在更改时,我必须先删除自定义类型。谢谢你的警告!