【发布时间】:2022-01-23 09:36:02
【问题描述】:
我有3张表如下:
DXBusinessPolicy_Policy
| ID | Code | Name |
|---|---|---|
| 1 | COMBO.2103001 | [Giá nền] T9/2020 #1 |
| 2 | IPTV-0121.002 | [Giá nền] T8/2020 #1 |
DXBusinessPolicy_Service
| ID | Code | Name |
|---|---|---|
| 1 | INT | Internet |
| 2 | IPTV | IPTV |
| 3 | CMR | Camera |
| 4 | FSAFE | Fsafe |
DXBusinessPolicy_PolicyService
| ID | PolicyID | ServiceID |
|---|---|---|
| 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 的服务的策略 ID 2 插入到表 DXBusinessPolicy_PolicyService 中。
我尝试执行此存储过程,但出现此错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
我的期望是:
DXBusinessPolicy_PolicyService
| ID | PolicyID | ServiceID |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 2 | 4 |
【问题讨论】:
-
我强烈建议您使用表值参数,而不是拆分字符串
标签: sql sql-server tsql stored-procedures sql-insert