Sql-Server

如何在“IN”語句中使用關鍵字“VALUES”?

  • December 8, 2020

我在 sql server 2016

select @@version

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

問題是,在我執行插入之前,我想使用與 相同的邏輯values來查明這些記錄中是否已經在表中。

否則你可能會得到這個:

在此處輸入圖像描述

我所做的方式是:

select top 10 * from
[APCore].[usr].[userBusinessArea]
where businessAreaid = 21
and Userid in
(368,227419,99906,140470)

這是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);

另請參閱文件中的範例

在 db<>fiddle 上試試

引用自:https://dba.stackexchange.com/questions/281098