Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在视图中插入两行或多行_Sql_Sql Server - Fatal编程技术网

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()
而不是其他任何东西来获取新插入的标识值。