Sql 在视图中插入两行或多行
我有一个代替触发器来插入、删除和更新我的视图。 我在插入两行或更多行时遇到一些问题Sql 在视图中插入两行或多行,sql,sql-server,Sql,Sql Server,我有一个代替触发器来插入、删除和更新我的视图。 我在插入两行或更多行时遇到一些问题 IF EXISTS(SELECT * FROM inserted) AND NOT EXISTS(SELECT * FROM deleted) BEGIN DECLARE @LastId INT INSERT INTO Sales.CreditCard SELECT i.CardType, i.CardNumber, i.ExpMonth,
IF EXISTS(SELECT * FROM inserted) AND NOT EXISTS(SELECT * FROM deleted)
BEGIN
DECLARE @LastId INT
INSERT INTO Sales.CreditCard
SELECT
i.CardType,
i.CardNumber,
i.ExpMonth,
i.ExpYear,
GETDATE()
FROM inserted i
SELECT @LastId = @@IDENTITY
INSERT INTO Sales.PersonCreditCard
(BusinessEntityID,
CreditCardID,
ModifiedDate)
SELECT
i.BusinessEntityID,
@LastId,
GETDATE()
FROM inserted i
END
SELECT@LastId=@@IDENTITY
获取最后一行的ID
,但我插入了两个或更多。如何将此脚本更改为插入两行或更多行?尝试使用游标
Declare @cardtype int,
Declare @cardnumber int ,
Declare @expmonth int,
Declare @expyear int,
Declare @cursor CURSOR
Set @cursor = cursor FAST_FORWARD
for
select i.CardType,i.CardNumber,i.ExpMonth,i.ExpYear,GETDATE() from inserted i
Open cursor
FETCH NEXT from @cursor into @cardtype, @cardnumber, @expmonth, @expyear
WHILE @@fetch_status=0
BEGIN
-- your statement
FETCH NEXT from @cursor into @cardtype, @cardnumber, @expmonth, @expyear
END
close @cursor
deallocate @cursor
我认为我解决了我的问题,但我不确定这是一个伟大的解决方案。你觉得怎么样
IF EXISTS(SELECT * FROM inserted) AND NOT EXISTS(SELECT * FROM deleted)
BEGIN
DECLARE @LastId TABLE (ID INT, Number NVARCHAR(25))
INSERT INTO Sales.CreditCard
OUTPUT inserted.CreditCardID, inserted.CardNumber INTO @LastId
SELECT
i.CardType,
i.CardNumber,
i.ExpMonth,
i.ExpYear,
GETDATE()
FROM inserted i
INSERT INTO Sales.PersonCreditCard
(BusinessEntityID,
CreditCardID,
ModifiedDate)
SELECT
i.BusinessEntityID,
ID,
GETDATE()
FROM inserted i
INNER JOIN @LastId AS l
ON l.Number = i.CardNumber
END
我建议使用SCOPE\u IDENTITY()
而不是其他任何东西来获取新插入的标识值。