解密SQL查询

问题描述:

我目前正在查看一个查询而不访问执行查询的数据库。 (这并不理想,但这是我的任务)。我不是SQL专家,因为我无法运行查询,所以试图识别下面的代码。它正在读取和写入相同的临时表(复制?)。我不知道'Y'的来源是什么或最终的结果是什么。任何帮助表示赞赏。谢谢。解密SQL查询

INSERT INTO #temp1 
    SELECT X.CURSTATUS ,X.GENDER ,Y.PACKAGE ,X.AGE ,1 AS factor1 ,1 AS factor2; 
FROM #temp1 X WITH (NOLOCK) , 
    (SELECT 'P1' AS PACKAGE UNION ALL SELECT 'P2') Y 
WHERE X.PACKAGE = 'P5'; 

这是不是真的到同一个表。它将“追加”到同一个表中。也就是说,表格中的现有数据不受影响。

它所做的是为所有“P5”包中的包“P1”和“P2”添加行。这将新行添加到表中; “P5”行仍然存在。

+0

谢谢戈登。 – Run3Pal

INSERT INTO #temp1 

- 这是数据插入到的位置。它应该有BTW明确定义的列,这种格式是SQL反模式

SELECT X.CURSTATUS ,X.GENDER ,Y.PACKAGE ,X.AGE ,1 AS factor1 ,1 AS factor2; 
FROM #temp1 X WITH (NOLOCK) , 

- 这是来自#TEMP选择当前行

 (SELECT 'P1' AS PACKAGE UNION ALL SELECT 'P2') Y 

--Y是两个记录表有一列因为没有显示具体的联接,所以它是一个交叉联接 - 再次是一个反模式,明确使用交叉联接关键字来清楚地说明发生了什么好得多。

WHERE X.PACKAGE = 'P5'; 

- 此过滤来自#temp的记录以仅抓取记录值为'P5'的记录。由于它交叉连接到两个记录表Y,它将其他列中的数据作为P%记录并为P1和P2插入新记录。如果您有10个P5记录,则此插入将插入10个P1记录和10个P2记录。

+0

谢谢HLGEM – Run3Pal

对于#temp中具有PACKAGE值为“P5”的每一行,查询将分别插入PACKAGE值分别为“P1”&“P2”的两个新行。

重新格式化查询并用调制解调器语法替换过时的语法应该使其更易于理解。

INSERT INTO #temp1 (CURSTATUS, GENDER, PACKAGE, AGE, factor1, factor2) 
SELECT 
    X.CURSTATUS, 
    X.GENDER, 
    Y.PACKAGE, 
    X.AGE, 
    1 AS factor1, 
    1 AS factor2 
FROM 
    #temp1 X 
    CROSS JOIN ( 
       SELECT 'P1' AS PACKAGE 
       UNION ALL 
       SELECT 'P2' 
       ) Y 
WHERE 
    X.PACKAGE = 'P5'; 
+0

谢谢贾森 – Run3Pal

+0

不客气。 :) –