SQL错误:"必须声明标量变量"将表参数传递给表值函数时

时间:2015-05-20 02:59:33

标签: sql sql-server

以下简单的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';

任何建议都将不胜感激。

2 个答案:

答案 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