以下简单的SQL示例返回错误。
这是传递给表值函数的表类型:
CREATE TYPE Ids
AS TABLE
(
Id int NOT NULL,
PRIMARY KEY( Id )
);
GO
这是失败的表值函数:
CREATE FUNCTION GetIds
(
@ids -- or null
Ids READONLY
)
RETURNS
@result
TABLE
(
EachId int
)
AS
BEGIN
IF @ids IS NOT NULL
INSERT INTO @result
SELECT Id
FROM @ids;
RETURN;
END;
GO
返回的错误是:
消息137,级别16,状态1,过程GetIds,第28行
必须声明标量变量“ @ids”。
我读过一些文章,说当SQL兼容性级别太旧时会发生这种情况,但是以下内容返回100:
SELECT compatibility_level
FROM sys.databases
WHERE name = 'TheDatabaseName';
任何建议将不胜感激。
让我告诉你表类型参数就像一个数据表。
因此,如果您想在条件上加上条件
只需更改您的if条件,如下所示:
IF (select count(*) from @ids) > 0
完整的功能代码为:
CREATE FUNCTION GetIds
(
@ids Ids READONLY
)
RETURNS @result TABLE(EachId int)
AS
BEGIN
IF (select count(*) from @ids) > 0
INSERT INTO @result
SELECT Id FROM @ids;
RETURN;
END;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句