-- 1. 先删除已存在的永久表(避免冲突)
IF OBJECT_ID('DBO.DBO.CUSTOMER_CONTACTS') IS NOT NULL
DROP TABLE DBO.CUSTOMER_CONTACTS
-- 2. 创建【永久表】
CREATE TABLE DBO.CUSTOMER_CONTACTS
(
[SEQ] [int] IDENTITY(1, 1) NOT NULL, -- 自增序号
[CUSTOMER_ID] NVARCHAR(50), -- 客户ID
[CONTACT1] NVARCHAR(100), -- 联系人1
[CONTACT2] NVARCHAR(100), -- 联系人2
[CONTACT3] NVARCHAR(100) -- 联系人3
)
ON [PRIMARY]
-- 3. 为永久表创建索引
CREATE UNIQUE INDEX IDX_TMP_CONTACTS_SEQ ON DBO.CUSTOMER_CONTACTS (SEQ)
CREATE INDEX IDX_TMP_CONTACTS_CUSTID ON DBO.CUSTOMER_CONTACTS (CUSTOMER_ID)
-- 4. 插入数据到永久表
INSERT INTO DBO.CUSTOMER_CONTACTS
(
[CUSTOMER_ID],
[CONTACT1],
[CONTACT2],
[CONTACT3]
)
SELECT
CUSTOMER.ID AS [CUSTOMER_ID],
CUSTOMER.CONTACTER AS [CONTACT1],
CUSTOMER.CONTACTER2 AS [CONTACT2],
CUSTOMER.CONTACTER3 AS [CONTACT3]
FROM CUSTOMER
WHERE CUSTOMER.ID = '%ScreenCompStrVal.客户代号%'
--SELECT * FROM DBO.CUSTOMER_CONTACTS --测试永久表查找结果
-- 5. 声明变量(不变)
DECLARE @HasGroup2Data BIT = 0
DECLARE @HasGroup3Data BIT = 0
DECLARE @SelectedGroup INT = 1
-- 6. 检测分组数据完备性(不变)
SELECT
@HasGroup2Data = CASE WHEN NULLIF(RTRIM(CONVERT(NVARCHAR(MAX),ADDRESS2)),'') IS NOT NULL
AND NULLIF(RTRIM(CONVERT(NVARCHAR(100),CONTACTER2)),'') IS NOT NULL
AND NULLIF(RTRIM(CONVERT(NVARCHAR(50),TEL2)),'') IS NOT NULL THEN 1 ELSE 0 END,
@HasGroup3Data = CASE WHEN NULLIF(RTRIM(CONVERT(NVARCHAR(MAX),ADDRESS3)),'') IS NOT NULL
AND NULLIF(RTRIM(CONVERT(NVARCHAR(100),CONTACTER3)),'') IS NOT NULL
AND NULLIF(RTRIM(CONVERT(NVARCHAR(50),TEL3)),'') IS NOT NULL THEN 1 ELSE 0 END
FROM CUSTOMER
WHERE CONVERT(NVARCHAR(20),ID) = CONVERT(NVARCHAR(20),'%ScreenCompStrVal.客户代号%')
-- 7. 动态选择逻辑(核心:引用永久表,表名不变)
IF @HasGroup2Data = 1 OR @HasGroup3Data = 1
BEGIN
SET @SelectedGroup = (
%UserInputPopTree.请选择联系人
^1^
SELECT
field_name AS '字段名称',
field_value AS '值',
CASE field_name
WHEN '联系人1' THEN '1'
WHEN '联系人2' THEN '2'
WHEN '联系人3' THEN '3'
END AS '选项编号'
FROM DBO.CUSTOMER_CONTACTS
CROSS APPLY (
VALUES
('联系人1', CONTACT1),
('联系人2', CONTACT2),
('联系人3', CONTACT3)
) AS unpivoted(field_name, field_value)
^只能是下拉中的值;指定第几列为关键值:2;只能选择最底层;大写;限制长度:30%
)
END
-- 8. 动态输出结果(不变)
SELECT
ID AS '客户代号',
CASE @SelectedGroup
WHEN 1 THEN ADDRESS
WHEN 2 THEN ADDRESS2
WHEN 3 THEN ADDRESS3
END AS '详细地址',
CASE @SelectedGroup
WHEN 1 THEN CONTACTER
WHEN 2 THEN CONTACTER2
WHEN 3 THEN CONTACTER3
END AS '联系人',
CASE @SelectedGroup
WHEN 1 THEN TEL
WHEN 2 THEN TEL2
WHEN 3 THEN TEL3
END AS '电话号码',
CASE @SelectedGroup
WHEN 1 THEN FAX
WHEN 2 THEN FAX2
WHEN 3 THEN FAX3
END AS '传真号码',
CASE @SelectedGroup
WHEN 1 THEN EMAIL
WHEN 2 THEN EMAIL2
WHEN 3 THEN EMAIL3
END AS '邮箱地址'
FROM CUSTOMER
WHERE CONVERT(NVARCHAR(20),ID) = CONVERT(NVARCHAR(20),'%ScreenCompStrVal.客户代号%')
-- 9. 删除永久表
DROP TABLE DBO.CUSTOMER_CONTACTS