Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-SERVER中的USP和CTE性能问题_Sql_Sql Server_Performance_Stored Procedures - Fatal编程技术网

SQL-SERVER中的USP和CTE性能问题

SQL-SERVER中的USP和CTE性能问题,sql,sql-server,performance,stored-procedures,Sql,Sql Server,Performance,Stored Procedures,谁能帮我写一个更好的存储过程 下面的代码花了3个小时运行了5000万条记录 下面的USP将进行一些计算,我正试图只保留相同SKU的最低新价格记录。您可以更改程序,只返回每个SKU的最低新价格 CREATE PROCEDURE Usp_conditioncheck @mydate VARCHAR(50) AS SELECT * INTO mytable FROM (SELECT *, NEWPRICE =( spw - ( (

谁能帮我写一个更好的存储过程

下面的代码花了3个小时运行了5000万条记录


下面的USP将进行一些计算,我正试图只保留相同SKU的最低新价格记录。

您可以更改程序,只返回每个
SKU的最低
新价格

CREATE PROCEDURE Usp_conditioncheck @mydate VARCHAR(50) 
AS 
    SELECT * INTO   mytable 
    FROM   (SELECT *, 
                   NEWPRICE =( spw - ( ( spw * 15 ) / 100 ) ), 
                   rn = Row_number()OVER (partition BY sku ORDER BY ( spw - ( ( spw * 15 ) / 100 ) ) ASC) 
            FROM   table1 CMS 
                   INNER JOIN table2 CRT 
                           ON id = id) A 
    WHERE  rn = 1 
SELECT * FROM mytable 
现在只需
选择每个
SKU的
NEWPRICE
最低的表即可

CREATE PROCEDURE Usp_conditioncheck @mydate VARCHAR(50) 
AS 
    SELECT * INTO   mytable 
    FROM   (SELECT *, 
                   NEWPRICE =( spw - ( ( spw * 15 ) / 100 ) ), 
                   rn = Row_number()OVER (partition BY sku ORDER BY ( spw - ( ( spw * 15 ) / 100 ) ) ASC) 
            FROM   table1 CMS 
                   INNER JOIN table2 CRT 
                           ON id = id) A 
    WHERE  rn = 1 
SELECT * FROM mytable 

这是存储过程中的查询:

SELECT *
FROM table1 CMS INNER JOIN
     table2 CRT
     ON ID = ID CROSS APPLY
--------^
     (SELECT NEWS = (SPW - ((SPW * 15)/100))) AS C
如果此查询运行,则它正在执行
交叉联接
。为什么?如果两个表中都有
id
列,则会出现错误(关于不明确的列引用)


我建议您始终使用完全限定的列名——也就是说,对列来自的表使用表别名。

我已经编辑了我的问题,查询执行得非常糟糕。请分享你的建议。请任何人在这方面帮助我。