【问题标题】:Multiple inserts and selects in one stored procedure在一个存储过程中进行多次插入和选择
【发布时间】:2010-10-16 12:06:11
【问题描述】:

我想创建一个过程

A) 检查 TicketNumberInput 是否在表 Tix_number.TicketNumber 中。

B) 如果确实存在,则更新记录以将 UID 设置为 @uid 并将 Claimdate 设置为 GetDate()

和...

C) 将记录插入另一个表(事务日志表)

如果记录确实存在,只需在事务日志中添加一条 STATUS = 2(失败)的记录。

到目前为止,这是我的代码,但检查 IF 语句并更新记录和插入另一条记录似乎没有问题。如何在语句中添加许多检查。 Begin End 似乎不起作用

create procedure [dbo].[UpdateTicketNumber]
@TicketNumberInput uniqueidentifier, 
@UID   int
as 
IF EXISTS(
BEGIN
    SELECT *
    FROM [tixtowin].[dbo].[Tix_Number]
    where @TicketNumberInput = Tix_Number.TicketNumber)
    PRINT 'CORRECT RECORD'

    Update Tix_Number 
    Set Tix_Number.UID = @uid, ClaimDate = GETDATE()
    where TicketNumber = @TicketNumberInput

    /* Success - insert transaction message. Status = 1 */
    INSERT INTO [Tix_Transaction]
    ([Tix_Number],[UID], [status], [Datetime])
    VALUES
    (@TicketNumberInput, @UID, '1', GetDate())

    End
    ELSE

    /* Failed - insert transaction message. Status = 2 */
    INSERT INTO [Tix_Transaction]
    ([Tix_Number],[UID], [status], [Datetime])
    VALUES
    (@TicketNumberInput, @UID, '2', GetDate())

    PRINT 'INCORRECT RECORD'

谢谢你的帮助!!!

【问题讨论】:

    标签: sql sql-server tsql stored-procedures


    【解决方案1】:

    您的 IF 中没有任何测试。你需要测试,然后做一些事情:

    create procedure [dbo].[UpdateTicketNumber] 
    @TicketNumberInput uniqueidentifier,  
    @UID   int 
    
    as  
    IF EXISTS (SELECT NULL
        FROM [tixtowin].[dbo].[Tix_Number] 
        where @TicketNumberInput = Tix_Number.TicketNumber) 
    BEGIN 
    
        PRINT 'CORRECT RECORD' 
    
        Update Tix_Number  
        Set Tix_Number.UID = @uid, ClaimDate = GETDATE() 
        where TicketNumber = @TicketNumberInput 
    
        /* Success - insert transaction message. Status = 1 */ 
        INSERT INTO [Tix_Transaction] 
        ([Tix_Number],[UID], [status], [Datetime]) 
        VALUES 
        (@TicketNumberInput, @UID, '1', GetDate()) 
    
    END 
    ELSE 
    BEGIN 
        /* Failed - insert transaction message. Status = 2 */ 
        INSERT INTO [Tix_Transaction] 
        ([Tix_Number],[UID], [status], [Datetime]) 
        VALUES 
        (@TicketNumberInput, @UID, '2', GetDate()) 
    
        PRINT 'INCORRECT RECORD' 
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多