Mar*_*lli 2 sql-server query syntax insert select
我在 sql server 2016
select @@version
Run Code Online (Sandbox Code Playgroud)
Microsoft SQL Server 2016 (SP2-CU15) (KB4577775) - 13.0.5850.14 (X64) Sep 17 2020 22:12:45 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows Server 2012 R2 上的基于内核的许可(64 位)数据中心 6.3(内部版本 9600:)(管理程序)
在 sql server 中的一个简单插入语句中,我有关键字 values
例如:
BEGIN TRANSACTION T1
SELECT @@TRANCOUNT
INSERT INTO [APCore].[usr].[userBusinessArea]
([businessAreaID]
,[userID])
VALUES
(21, 368),
(21, 227419) ,
(21, 99906),
(21, 140470)
SELECT [1]= @@TRANCOUNT
--COMMIT TRANSACTION T1
--ROLLBACK
SELECT [2]=@@TRANCOUNT
Run Code Online (Sandbox Code Playgroud)
问题是,在我运行插入之前,我想使用与 相同的逻辑values来找出这些记录中是否已经有任何记录在表中。
否则你可能会得到这样的结果:
我的做法是:
select top 10 * from
[APCore].[usr].[userBusinessArea]
where businessAreaid = 21
and Userid in
(368,227419,99906,140470)
Run Code Online (Sandbox Code Playgroud)
这是after插入:
我在这里看到了一些例子:SQL Server IN Operator
在声明中是否有一个好的和值得使用的方法?valuesin
一种选择是引用该VALUES条款,就像它被具体化时一样。
INSERT INTO [APCore].[usr].[userBusinessArea]
([businessAreaID]
,[userID])
SELECT
businessAreaID,
userID
FROM (
VALUES
(21, 368),
(21, 227419) ,
(21, 99906),
(21, 140470)
) v (businessAreaID, userID)
WHERE v.userID NOT IN (368,227419,99906,140470);
Run Code Online (Sandbox Code Playgroud)
另请参阅文档中的示例