sql-server - 使用 Output INTO 子句在表变量中输入多个条目
问题描述
我的用例如下:
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
我知道我们不能有多个插入 usingOUTPUT INTO
子句,但是有没有其他方法可以为插入的行形成基于列的数据?
解决方案
您需要尝试以下步骤:
OUTPUT 子句只是将行插入到表变量中,即一行到一行的映射。您需要相应地修改表定义。
现在,您可以使用 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 |
+----------+--------+----------+
推荐阅读
- c++ - 是否可以从 DUMPBIN /SYMBOLS 命令派生声明的函数?
- triggers - 无法绑定到用户控件内的工具提示
- mariadb - 从 SELECT 或 UPDATE 中的不同行中查找值
- javascript - Flatlist 无法呈现项目
- r - 无法预测 tslm
- elasticsearch - Elastic SIEM - 警报和关联
- r - 变量中每个因子的 p 值
- json - Angular 11 上的 rss-parser(TypeError:get 不是函数)
- react-native - 无法在 React Native View 上检测到手指释放
- android - Android COIL 加载夜间占位符可在灯光模式下瞬间绘制