2011-09-07 39 views
10

Tôi đang cố gắng viết một thủ tục được lưu trữ để kiểm tra sự tồn tại của bản ghi và nếu nó không tồn tại, một lệnh chèn trả về SCOPE_IDENTITY và nếu nó tồn tại, chỉ cần trả lại ID của đối tượng. Sau khi tôi nhận được thông tin này trong quy trình, tôi cần phải thực hiện tiếp tục xử lý và không chắc chắn về cách hoàn thành việc nhận được số SCOPE_IDENTITY từ trong tuyên bố IF...ELSE.Đặt biến thành SCOPE_IDENTITY bên trong câu lệnh IF

My hai bảng:

CREATE TABLE [dbo].[ActionTable] (
    [ActionID] [int] IDENTITY(1, 1) NOT NULL, 
    [ObjectID] [int] NOT NULL, 
    [ActionName] [nvarchar](255) NOT NULL 
) 

CREATE TABLE [dbo].[ObjectTable] (
    [ObjectID] [int] IDENTITY(1, 1) NOT NULL, 
    [ObjectName] [nvarchar](255) NOT NULL 
) 

Stored Procedure:

CREATE PROCEDURE [dbo].[SetAction] 
    @ActionName [nvarchar](255), 
    @ObjectName [nvarchar](255) 
AS 
    DECLARE @ObjectID [int] 

    --I have tried the following 

    IF NOT EXISTS(SELECT ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName) 
     INSERT INTO ObjectTable(ObjectName)VALUES(@ObjectName) 
     --Here I need to set @ObjectID = SELECT SCOPE_IDENTITY() 
    ELSE 
     SELECT @ObjectID = ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName 

này trả Incorrect syntax near the keyword 'ELSE'

Điều gì sẽ là phương pháp tốt nhất cho việc hoàn thành lookup này/chèn? Sau khi tôi nhận được ID sau đó tôi sẽ làm như sau

INSERT INTO ActionTable(ObjectID, ActionName) VALUES(@ObjectID, @ActionName) 

SELECT SCOPE_IDENTITY() 

Trả lời

22

Nếu bạn có nhiều hơn một điều làm bạn cần một BEGIN END

IF NOT EXISTS(SELECT ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName) 
BEGIN 
     INSERT INTO ObjectTable(ObjectName)VALUES(@ObjectName) 
     SET @ObjectID = SCOPE_IDENTITY() 
END 
ELSE 
SELECT @ObjectID = ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName 
4

Bạn luôn nên sử dụng BEGIN/END ngay cả đối với chỉ có một tuyên bố để khi bạn thêm câu lệnh sau, mã của bạn không bị hỏng.

IF ... 
BEGIN 
    ... statements 
END 
ELSE 
BEGIN 
    ... statements 
END 
Các vấn đề liên quan