1

私は SQL Server プログラミングの初心者です。テーブル値のユーザー定義関数を作成していますが、実行すると次のエラーが発生します。

*Msg 178、Level 15、State 1、Procedure Select_info_FN、Line 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
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 に答える