我真的是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
答案 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