olarak ayarlayın. Bir kaydın varlığını kontrol edecek bir saklı yordam yazmayı deniyorum ve eğer mevcut değilse SCOPE_IDENTITY
döndüren bir eki yapın ve varsa nesne. Bu bilgiyi prosedürde edindikten sonra, onunla daha fazla işlem yapmam gerekiyor ve bir IF...ELSE
bildiriminin içinden SCOPE_IDENTITY
elde etmenin nasıl olacağından emin değilim.IF deyiminde SCOPE_IDENTITY değişkenini
Benim iki tablo:
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
)
Saklı Prosedür:
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
Bu Incorrect syntax near the keyword 'ELSE'
Bunun arama gerçekleştirmek için en iyi yöntem olacaktır döndürür/insert? Ben kimliği aldıktan sonra ben o zaman her zaman BEGIN kullanmalısınız
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