-2

SQL Server テーブルがありますtbl_Slide_masterslide_positionとして1 つの列がありますint。ただし、管理者が新しいスライドを追加する場合、この列はその列の既存の最大値から 1 ずつ増加します。また、このフィールドを更新したいだけです。

詳細については、このコードを含めました。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_InsertNewSlide]
(
    @Header_text varchar(25),
    @ImageName varchar(50),
    @Img_height int,
    @Img_width int,
    @Para_text varchar(520),
    @NewId INT OUTPUT
)
AS
BEGIN TRAN;
    BEGIN TRY
        INSERT INTO [OmStocks].[dbo].[tbl_Slide_master]
           ([Header_text]
           ,[ImageName]
           ,[Img_height]
           ,[Img_width]
           ,[Para_text]
           ,[slide_position]
            )
          VALUES
           (@Header_text,@ImageName,@Img_height,@Img_width,@Para_text,SELECT MAX(slide_position)+1)
        SET @NewId= SCOPE_IDENTITY()
    COMMIT TRAN;
    END TRY 

    BEGIN CATCH
    ROLLBACK TRAN;
        DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int;
        SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY();
        RAISERROR(@ErrMsg, @ErrSeverity, 1);
  END CATCH;

のようなエラーが1つ発生しました

メッセージ 1046、レベル 15、状態 1、プロシージャ sp_InsertNewSlide、行 21
サブクエリは、このコンテキストでは許可されていません。スカラー式のみが許可されます。

4

1 に答える 1

2

あなたのVALUES句には次のものがあります:

SELECT MAX(slide_position)+1

クエリにテーブル名が含まれていないため、これは有効なサブクエリではありません。

この増分フィールドのロジックは私には明確ではないため、現在テーブルにある最大値が必要であると仮定します。

SELECT MAX(slide_position)+1 FROM tbl_Slide_master

ただし、これが単なる通常の ID フィールドである場合はIDENTITY (1,1)、テーブル作成スクリプトでフィールドとして宣言し、SQL Server に管理させる必要があります。

于 2013-04-06T08:50:09.247 に答える