我有 3 個表,如下所示:
DXBusinessPolicy_Policy
| ID | 代碼 | 名稱 |
|---|---|---|
| 1 | COMBO.2103001 | [Giá n?n] T9/2020 #1 |
| 2 | IPTV-0121.002 | [Giá n?n] T8/2020 #1 |
DXBusinessPolicy_Service
| ID | 代碼 | 名稱 |
|---|---|---|
| 1 | 情報局 | 互聯網 |
| 2 | 網路電視 | 網路電視 |
| 3 | CMR | 相機 |
| 4 | 金融安全域 | 安全 |
DXBusinessPolicy_PolicyService
| ID | 策略 ID | 服務ID |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
這是我的存盤程序:
CREATE PROCEDURE InsertPolicyService
@id int,
@services varchar(1000) //This is Service Name
AS
BEGIN
INSERT INTO dbo.DXBusinessPolicy_PolicyService (PolicyID, ServiceID)
SELECT
@id,
(SELECT dbo.DXBusinessPolicy_Service.ID
FROM dbo.DXBusinessPolicy_Service
WHERE dbo.DXBusinessPolicy_Service.Code IN (SELECT VALUE FROM string_split(@services, ',')))
END
EXEC InsertPolicyService 2, 'FSAFE,CMR'
我想將帶有名為 FSAFE 和 CMR 的服務的 Policy ID 2 插入到表 DXBusinessPolicy_PolicyService 中。
我嘗試執行此存盤程序,但出現此錯誤:
子查詢回傳了 1 個以上的值。當子查詢跟隨 =、!=、<、<=、>、>= 或當子查詢用作運算式時,這是不允許的。
我的期望是:
DXBusinessPolicy_PolicyService
| ID | 策略 ID | 服務ID |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 2 | 4 |
uj5u.com熱心網友回復:
您的內部子查詢回傳多個結果,這在子查詢中是不可能的。但是,您不需要那么多查詢,只需要一個:
INSERT INTO dbo.DXBusinessPolicy_PolicyService (PolicyID, ServiceID)
SELECT @id, dbo.DXBusinessPolicy_Service.ID
FROM dbo.DXBusinessPolicy_Service
WHERE dbo.DXBusinessPolicy_Service.Code IN (
SELECT VALUE FROM string_split(@services,','))
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391571.html
標籤:sql sql-server 查询语句 存储过程 sql 插入
上一篇:將列值拆分為新行
