Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 这个问题怎么了?_Sql Server - Fatal编程技术网

Sql server 这个问题怎么了?

Sql server 这个问题怎么了?,sql-server,Sql Server,请参见下一行: FID | IssueDate | IssueType | Status 46128 | 2010-12-30 00:00:00.000 | 2 | 1 我被一件非常愚蠢的事情绊住了,一个初学者也能做得很好。我需要更新上面的行。我已经以各种方式提出了同样的解决方案,但还没有实现。我不知道为什么 让我来解释一下 FID是我的主键,Issue

请参见下一行:

FID    |     IssueDate                   |  IssueType         |    Status
46128  |     2010-12-30 00:00:00.000     |     2              |     1   
我被一件非常愚蠢的事情绊住了,一个初学者也能做得很好。我需要更新上面的行。我已经以各种方式提出了同样的解决方案,但还没有实现。我不知道为什么

让我来解释一下

FID是我的主键,Issue Date是我的贴纸Issue Date,Issue type是我的贴纸类型,status是贴纸的当前状态

现在我要检查的是发行日期与当前年份的4月1日。如果系统日期已从3月31日(固定的最后到期日期)更改,则行的状态将自动变为过期,并且状态将从1更改为3

我正在使用给定的查询,执行后显示0行已更新。请告诉我哪里出错了

ALTER PROCEDURE [dbo].[spMakeStickerVoid]
(
    @FisherId BIGINT,
    @ManipulatedByUser VARCHAR(50),
    @OPParam INT OUTPUT
)
AS

BEGIN

   DECLARE @CurrentDate as DATETIME,
           @FirstAprilOfCurrentYear AS DATETIME

    SET @FirstAprilOfCurrentYear = (select dateadd(month,datediff(month,0,getdate()) ,'18990401'));
    SET @CurrentDate = GETDATE();
    --SET @OPParam =0


        IF @CurrentDate >= @FirstAprilOfCurrentYear

            BEGIN

                UPDATE tblStickerInfo
                SET    StatusId = 3

                WHERE  FisherId = 46128 AND  (IssuedDate < @FirstAprilOfCurrentYear) AND StatusId = 1

            END
        --SET @OPParam =1



END

其中FisherId=46128,且


你是想硬编码Fischerid的值吗?您不应该使用输入变量吗?

@FirstAprilOfCurrentYear
是2010年4月1日,这意味着
(IssuedDate<@FirstAprilOfCurrentYear)
不是真的

这可能是你想要的

declare @FirstOfAprilCurrentYear datetime
set @FirstOfAprilCurrentYear = dateadd(year,datediff(year,0,getdate()) ,'1900-04-01') 

if @FirstOfAprilCurrentYear >= getdate()
begin
    -- Current date is After 31st March current year
    update tblstickerinfo
    set statusid = 3
    where IssuedDate < @FirstOfAprilCurrentYear
end
declare@FirstOfAprilCurrentYear日期时间
set@FirstOfAprilCurrentYear=dateadd(year,datediff(year,0,getdate()),'1900-04-01')
如果@FirstOfAprilCurrentYear>=getdate()
开始
--当前日期在本年3月31日之后
更新tblstickerinfo
设置statusid=3
发布日期<@四月一日
终止

我被今年4月1日的含义弄糊涂了,在我看来这意味着
2011.04.01
但是
(选择dateadd(month,datediff(month,0,getdate()),'18990401'))
返回2010.04.01-这是预期的行为吗?值得一提的是,您的查询引用了不正确的列名。它可能应该是
UPDATE tblStickerInfo SET Status=3,其中FID=46128,IssueDate<@FirstAprilOfCurrentYear AND Status=1
。如果在四天内运行此操作,变量
@FirstAprilOfCurrentYear
将包含去年5月1日(2010-05-01)。。。列名为
FID
。但是已经有了一个
@FisherId
BIGINT参数。真正的问题是
@firstAprilofccurrentYear
返回2010-04-01(参见Mikaels的答案)。@AmRan:添加了一些您可能能够使用的内容。
declare @FirstOfAprilCurrentYear datetime
set @FirstOfAprilCurrentYear = dateadd(year,datediff(year,0,getdate()) ,'1900-04-01') 

if @FirstOfAprilCurrentYear >= getdate()
begin
    -- Current date is After 31st March current year
    update tblstickerinfo
    set statusid = 3
    where IssuedDate < @FirstOfAprilCurrentYear
end