1

我真的是 SQL Server 编程的初学者。我正在编写一个表值用户定义函数,但是当我执行它时,我得到了这个错误:

*消息 178,级别 15,状态 1,过程 Select_info_FN,第 10 行
在此上下文中不能使用具有返回值的 RETURN 语句。
消息 102,级别 15,状态 31,过程 Select_info_FN,第 12 行“开始
”附近的语法不正确。*

这是我的代码:

create function Select_info_FN() returns table
as
begin
    declare @count int
    SELECT @count = COUNT(*) FROM dbo.info  
    if @count = 0
    begin
        INSERT INTO dbo.info VALUES (NULL, NULL, NULL, NULL, NULL)  
    end
    return (SELECT * FROM dbo.info)
end
4

1 回答 1

1

尝试类似以下的操作。我不知道列名和类型是什么,但你可以Column*用你的列模式替换。

CREATE FUNCTION Select_info_FN()
RETURNS @result TABLE
(
    Column1 INT,
    Column2 INT,
    Column3 INT,
    Column4 INT,
    Column5 INT
)
AS
BEGIN
    IF (SELECT COUNT(*) FROM dbo.info) = 0
    BEGIN
        INSERT INTO @result VALUES (NULL, NULL, NULL, NULL, NULL)  
    END
    ELSE
    BEGIN
        INSERT INTO @result
                SELECT Column1, Column2, Column3, Column4, Column5 FROM dbo.info
    END
    RETURN
END
GO

但是,如果您的目标是修改现有表而不是构建用于查询的数据表,那么Aaron Bertrand是正确的,您不能在函数中执行插入操作,而sgeddes是正确的,您应该使用存储的程序。在这种情况下,请尝试以下操作。

CREATE PROCEDURE Select_info
AS
BEGIN
    IF (SELECT COUNT(*) FROM dbo.info) = 0
    BEGIN
        INSERT INTO dbo.info (Column1, Column2, Column3, Column4, Column5)
                VALUES (NULL, NULL, NULL, NULL, NULL)  
    END
    SELECT * FROM dbo.info
END
GO
于 2013-01-30T00:57:04.103 回答