【问题标题】:Update Statements in Stored Procedure Suquentially?依次更新存储过程中的语句?
【发布时间】:2013-08-30 11:57:51
【问题描述】:

以下 UPDATE A iam 更新 facot Squares 表 -iam 使用 sqare 表中的更新因子来计算参数中的最终值 下面 UPDATE A iam 更新 facot Squares 表 下面 UPDATE A iam 更新 facot Squares 表

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

【问题讨论】:

  • 请提供一些示例数据来说明问题所在。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这可能是由于数据类型转换而发生的。

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

    Sql server 更新将尽其所能,但需要验证数据类型。

    【讨论】:

      【解决方案3】:

      声明@StartDate 日期 声明@EndDate 日期 声明@Cursor CURSOR SET @Cursor = CURSOR FOR 从 #Dates 中选择 StartDay,EndDate

      打开@Cursor 获取下一个 从@Cursor 到@StartDate,@EndDate 而@@FETCH_STATUS = 0 开始

      插入#Dest 从#Results 中选择@StartDate StartDate,@EndDate EndDate, Max(high) High,min(low) Low @StartDate 和 @EndDate 之间的日期 获取下一个 从@Cursor 到@StartDate,@EndDate 结尾 关闭@Cursor 解除@Cursor SELECT B.[open],a.* FROM #Dest A 加入#Results B ON A.StartDate=B.dATE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多