jon*_*aze 12 sql-server stored-procedures if-statement sql-server-2008
我正在尝试编写一个存储过程来检查是否存在记录,如果它不存在,则返回一个插入SCOPE_IDENTITY
,如果确实存在则只返回该对象的ID.我在程序中获得此信息后,我需要使用它进行进一步处理,并且不确定如何SCOPE_IDENTITY
在IF...ELSE
语句中完成获取.
我的两张桌子:
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
)
Run Code Online (Sandbox Code Playgroud)
存储过程:
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
Run Code Online (Sandbox Code Playgroud)
这回来了 Incorrect syntax near the keyword 'ELSE'
什么是完成此查找/插入的最佳方法?获得ID后,我将执行以下操作
INSERT INTO ActionTable(ObjectID, ActionName) VALUES(@ObjectID, @ActionName)
SELECT SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
Ben*_*son 28
如果你有多件事要做,你需要一个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
BEGIN
SELECT @ObjectID = ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName
END
Run Code Online (Sandbox Code Playgroud)