2013-10-24 4 views
0

У меня есть одно приложение crm. Я нашел запрос в моей реализации db, в то время как ответ на запрос пользователя по запросу пользователя мне нужно вставить новые запросы ans в одну таблицу и одновременно изменить другие данные таблицы. Я применил логику, а также я представляю сохраненную proc. но в этом процессе произошла ошибка.Как использовать заявление о выборе дела с транзакцией sql

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 ([email protected]_name)) 
set @var2= (SELECT [Id] FROM [OmStocks].[dbo].[tbl_Priority_master] WHERE ([email protected]_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 ([email protected]_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 ([email protected]_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'. 

пожалуйста, помогите мне ...

+0

Похоже, вы пытаетесь использовать 'SELECT CASE' из VB в вашем SQL. Эти ключевые слова существуют, но они не делают то же самое. – David

ответ

1

Вы не можете использовать CASE для этого. CASE - это выражение, которое возвращает единственный результат, а не оператор, который может использоваться для управления потоком. Я понимаю, что CASE используется таким образом на некоторых других языках, но это просто невозможно в T-SQL.

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

IF @Status_name = 'Close' THEN 
BEGIN 
    -- do other stuff 
END 
+0

спасибо, что это работает .. –

Смежные вопросы