0

私は1つのcrmアプリケーションを持っています。スタッフユーザーが問い合わせの返信を投稿しているときに、データベース実装でクエリを見つけました。新しい問い合わせを1つのテーブルに挿入し、同時に別のテーブルデータを変更する必要があります。のロジックを適用し、ストアド プロシージャを表します。しかし、このプロセスでエラーが発生しました。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InquiryPostReply]
(
    @Inquiry_id VARCHAR(50),
    @Priority_type VARCHAR(25),
    @Status_name VARCHAR(50),
    @Inquiry_Content VARCHAR(1024),
    @NewId VARCHAR(50) OUT
)
AS
BEGIN
SET NOCOUNT ON;
declare @var1 int
declare @var2 int
declare @uniqueRef char(14)
set @uniqueRef = dbo.UniqueRefNum(rand(), rand(), rand(), rand())
set @var1= (SELECT [Id] FROM [OmStocks].[dbo].[tbl_Status_master] WHERE (Status_name=@Status_name))
set @var2= (SELECT [Id] FROM [OmStocks].[dbo].[tbl_Priority_master] WHERE (Priority_name=@Priority_type))
    SELECT 
        CASE @Status_name
        WHEN 'Open' THEN
            BEGIN TRAN;
            BEGIN TRY
                INSERT INTO [OmStocks].[dbo].[tbl_Inquiry_master]
                ([Id],[Inquiry_id],[Priority_id],[Status_id],[Inquiry_Content],[TimeStamp])
                VALUES
                (@uniqueRef,@Inquiry_id,@var2,@var1,@Inquiry_Content,CONVERT(DATETIME,GETDATE(), 101))
                UPDATE [OmStocks].[dbo].[tbl_Inquiry_History] 
                    SET [Priority_id] = @var2,[Status_id] = @var1,[IsDisplay] = 1,[IsReplied] = 1,[TimeStamp] = CONVERT(DATETIME,GETDATE(), 101)
                WHERE (Inquiry_id=@Inquiry_id)
            COMMIT TRAN;
            END TRY;
        WHEN 'Close' THEN
            BEGIN TRAN;
            BEGIN TRY
                INSERT INTO [OmStocks].[dbo].[tbl_Inquiry_master]
                ([Id],[Inquiry_id],[Priority_id],[Status_id],[Inquiry_Content],[TimeStamp])
                VALUES
                (@uniqueRef,@Inquiry_id,@var2,@var1,@Inquiry_Content,CONVERT(DATETIME,GETDATE(), 101))
                UPDATE [OmStocks].[dbo].[tbl_Inquiry_History] 
                    SET [Priority_id] = @var2,[Status_id] = @var1,[IsDisplay] = 0,[IsReplied] = 1,[TimeStamp] = CONVERT(DATETIME,GETDATE(), 101),[Activity_expire_time] = CONVERT(DATETIME,GETDATE(), 101)
                WHERE (Inquiry_id=@Inquiry_id)
            COMMIT TRAN;
            END TRY; 
    END
    SET @NewId = @uniqueRef
END

次のようなエラーが発生しました:

Msg 156, Level 15, State 1, Procedure InquiryPostReply, Line 21
Incorrect syntax near the keyword 'BEGIN'.
Msg 102, Level 15, State 1, Procedure InquiryPostReply, Line 31
Incorrect syntax near ';'.
Msg 102, Level 15, State 1, Procedure InquiryPostReply, Line 43
Incorrect syntax near ';'.
Msg 102, Level 15, State 1, Procedure InquiryPostReply, Line 46
Incorrect syntax near 'END'.

私を助けてください...

4

1 に答える 1

1

これには使えませんCASECASEフロー制御に使用できるステートメントではなく、単一の結果を返す式です。他のいくつかの言語でそのように使用されていることは理解していCASEますが、T-SQL では不可能です。

IF @Status_name = 'Open' THEN
BEGIN
  -- do stuff
END

IF @Status_name = 'Close' THEN
BEGIN
  -- do other stuff
END
于 2013-10-24T13:22:04.817 に答える