【问题标题】:Multiple entries in to table variable using Output INTO clause使用 Output INTO 子句在表变量中输入多个条目
【发布时间】:2020-04-02 04:35:37
【问题描述】:

我的用例如下:

Create table Emp
(
    id int ,
    fname varchar(100),
    lname varchar(100)
)

declare @aud table (prop varchar(1000),[oldval] varchar(100),[toval] varchar(100))

INSERT INTO EMP(id, fname, lname)
OUTPUT 'fname', '', inserted.fname INTO @aud (prop, [oldval], [toval])
VALUES (1,'malcolm','dsouza')


SELECT * FROM @aud

我希望数据形成如下:

prop   oldval   toval
------------------------
fname           malcolm
lname           dsouza

我知道我们不能使用OUTPUT INTO 子句进行多次插入,但是有没有其他方法可以为插入的行形成基于列的数据?

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:

    您需要尝试以下步骤:

    1. OUTPUT 子句只是将行插入到表变量中,即一行到一行的映射。您需要相应地修改表定义。

    2. 现在,您可以使用 CROSS APPLY 来获得您想要的结果。

    **TEST SETUP**
    Create table  #Emp(
    id int ,
    fname  varchar(100),
    lname varchar(100)
    )
    

    测试

    declare @aud table(oldfname varchar(100),fname varchar(100),oldlname varchar(100), lname varchar(100));
    
    INSERT INTO #EMP(id,fname,lname)
    OUTPUT '' as oldfname,inserted.fname, '' as oldlname, inserted.lname INTO @aud
    values (1,'malcolm','dsouza');
    
    SELECT property, oldval, newval as oldValue  
    FROM @aud
    CROSS APPLY 
    ( values('fname',oldfname,fname),('lname',oldlname, lname)) as t(property,oldVal, newVal)
    

    结果集

    +----------+--------+----------+
    | property | oldval | oldValue |
    +----------+--------+----------+
    | fname    |        | malcolm  |
    | lname    |        | dsouza   |
    +----------+--------+----------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2023-01-11
      • 2010-10-15
      • 2019-08-10
      相关资源
      最近更新 更多