在SQL Server中创建表值函数时出错

时间:2013-01-30 00:44:03

标签: sql sql-server sql-function

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

  

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

这是我的代码:

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

1 个答案:

答案 0 :(得分: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是正确的,您不能在函数中插入,{{3你应该使用存储过程是正确的。在这种情况下,请尝试以下内容。

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