我有一个sql主表CHANNEL_PT
我想基于另外两个主表CHANNEL
和PT
来填写。
三个列CHANNEL_PT
,CHANNEL_PT_CD
和CHANNEL_CD
的{{1}} cosist。
将记录插入PT_CD
的方案是这样的,
如果我在CHANNEL_PT
表中有两个条目,
和CHANNEL
表中的两个条目如下,
然后PT
表格如下
我知道这可以通过CHANNEL_PT
完成,但由于性能问题,我没有使用它。
我已经编写了如下查询以获得预期结果,但想知道任何其他更有效的方法或优化查询。
CURSOR
答案 0 :(得分:1)
听起来你正在描述一个交叉连接。列CHANNEL_PT_CD是否定义为IDENTITY列?这样就无需分配该值,因为服务器会为您完成。
然后你可以做一个简单的INSERT / SELECT
INSERT INTO CHANNEL_PT
SELECT b.CHANNEL_CD, c.PT
FROM CHANNEL b
cross join PT c
答案 1 :(得分:0)
请尝试:
DECLARE @CPT INT=0;
SELECT @CPT = ISNULL(MAX(CHANNEL_PT_CD),0) FROM CHANNEL_PT
INSERT INTO CHANNEL_PT
SELECT DISTINCT @CPT+ROW_NUMBER() OVER(ORDER BY b.CHANNEL_CD),
b.CHANNEL_CD,
c.PT
FROM CHANNEL b, PT c
WHERE (SELECT COUNT(*) FROM CHANNEL_PT a
WHERE a.CHANNEL_CD=b.CHANNEL_CD AND a.PT_CD=c.PT)=0