以下简单的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
返回的错误是:
Msg 137,Level 16,State 1,Procedure GetIds,Line 28
必须声明标量变量" @ ids"。
我已经阅读过帖子,说当SQL兼容级别太旧时会发生这种情况,但以下内容会返回100:
SELECT compatibility_level
FROM sys.databases
WHERE name = 'TheDatabaseName';
任何建议都将不胜感激。
答案 0 :(得分:1)
让我告诉你,表类型参数就像数据表一样。
所以,如果你想把if条件放在它上面,那么
只需更改你的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;
答案 1 :(得分:0)
只是检查你的表中是否有任何记录
if(select count(1) from @ids)>0