有效地更新存储过程中的语句?

时间:2013-08-27 16:04:51

标签: sql-server tsql stored-procedures sql-server-2008-r2 sql-update

以下更新一个iam更新facot Sqares表 -iam使用sqare表中的updatd因子来计算Parameter中的最终值    下面更新一个iam更新facot Sqares表 以下UPDATE A iam更新facot Sqares表

DECLARE @Year   char(8) = '2017';

WITH E1 AS(
   SELECT N FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) E(N)
),
E3 AS(
   SELECT a.N FROM E1 a, E1 b, E1 c
),
cteTally AS(
   SELECT TOP (360) DATEADD( dd, (ROW_NUMBER() OVER( ORDER BY (SELECT NULL)) - 1), CAST(@Year AS date))  myDate
   FROM E3
),
weekDays AS(
   SELECT myDate, ROW_NUMBER() OVER(PARTITION BY MONTH(myDate) ORDER BY myDate) rn
   FROM cteTally
   WHERE DATENAME( WEEKDAY, myDate) NOT IN ('Saturday', 'Sunday')
),
    Final as(
SELECT 
 myDate StartDay,
 datename(dw,myDate) Name, 

 DATEADD(dd,19,myDate) EndDay,
   DATEADD(MM, DATEDIFF(MM, 0, myDate), 0) FirstDay
FROM weekDays
WHERE rn = 1
)

SELECT FirstDay,StartDay,Name as StartName,

case when Name='Monday' THEN DATEADD(dd,18,StartDay)
     when Name='Tuesday' THEN DATEADD(dd,17,StartDay)
     when Name='Wednesday' THEN DATEADD(dd,16,StartDay)
     when Name='Thursday' THEN DATEADD(dd,15,StartDay)
     when Name='Friday' THEN DATEADD(dd,14,StartDay)

          ELSE NULL  END AS EndDate,


          case when Name='Monday' THEN datename(dw,DATEADD(dd,18,StartDay))
     when Name='Tuesday' THEN datename(dw,DATEADD(dd,17,StartDay))
     when Name='Wednesday' THEN datename(dw,DATEADD(dd,16,StartDay))
     when Name='Thursday' THEN datename(dw,DATEADD(dd,15,StartDay))
     when Name='Friday' THEN datename(dw,DATEADD(dd,14,StartDay))

          ELSE NULL  END AS EndName
 into #Dates FROM Final

3 个答案:

答案 0 :(得分:0)

声明参数@factor。 将第一个语句更改为set @factor =select B.candy/b.randy .....。 然后在没有连接的情况下进行更新。 (使用@factor) 调试并分析@factor以选择您的工作。 或者你可以在第二次更新中使用(nolock),但请记住,你没有提交你的交易,因为它看起来就在上次更新后(你的“问题”看起来像你在交易中,你的第一次更新将不会在第二次更新之前提交,因此您再次选择没有更新的表格

答案 1 :(得分:0)

由于数据类型转换,可能会发生这种情况。

请检查c。 finalvalue可以保存/插入/检索返回类型(cost * factor)。

Sql server update将完美无缺,但需要验证数据类型。

答案 2 :(得分:0)

DECLARE @StartDate日期    DECLARE @EndDate日期 DECLARE @Cursor CURSOR SET @Cursor = CURSOR FOR 从#Dates

中选择StartDay,EndDate

OPEN @Cursor FETCH NEXT 来自@Cursor INTO @ StartDate,@ EndDate WHILE @@ FETCH_STATUS = 0 BEGIN

INSERT INTO #Dest 从#Results中选择@StartDate StartDate,@ EndDate EndDate,Max(high)High,min(low)Low 其中@StartDate和@EndDate之间的日期 FETCH NEXT 来自@Cursor INTO @ StartDate,@ EndDate 结束 关闭@Cursor DEALLOCATE @Cursor SELECT B. [open],a。* FROM #Dest A.                      JOIN #Results B ON A.StartDate = B.dATE