使用DateLine更新列值

时间:2017-03-27 06:47:17

标签: c# sql

这是我的sql表

create table Poll_Question_Table (
PollQuestionId int primary key,
PollQuestionTex varchar(max),
PollStatus int ,
PollStartDate date,
PollEndDate date
)

如果当前日期使用函数或触发器通过结束日期(日期行),我想将状态值从1更改为0 ..... tnx为您提供帮助

2 个答案:

答案 0 :(得分:0)

这是我试过的

    CREATE FUNCTION dateLine(@PollEndDate date)  
RETURNS int   
AS   
-- Returns the stock level for the product.  
BEGIN  
DECLARE @ret int;
DECLARE @Now date
set @Now = GETDATE()
    if((SELECT DATEDIFF (day,@PollEndDate,@Now) AS DiffDate)>0)
        set @ret= 1;
       return @ret;  
END 

答案 1 :(得分:0)

您可以使用以下OPTION 1或OPTION 2中给出的2个触发器之一。我假设您的表存在于dbo模式下;如果没有,则用适当的模式名称替换dbo

如果您更喜欢使用您的功能,请转到选项2.如果您使用选项1,则无需使用dateLine功能。

请注意您的dateLine功能:请注意,您的dateLine功能并未真正检查当前日期是否超过了投票结束日期,这可能是如果您使用选项2,则会出现问题。)

插入或更新操作后触发器将触发。

选项1

CREATE TRIGGER dbo.changeStatus ON dbo.Poll_Question_Table AFTER
INSERT,
UPDATE AS
SET NOCOUNT ON;

DECLARE @pollEndDate datetime,
        @pollQuestionId int;


SELECT @pollQuestionId= i.PollQuestionId,
       @pollEndDate = i.PollEndDate
FROM Inserted i;


UPDATE dbo.Poll_Question_Table
SET PollStatus = CASE
                     WHEN GetDate() > @pollEndDate THEN 0
                     ELSE 1
                 END
WHERE PollQuestionId = @pollQuestionId and PollStatus = 1;

GO

您也可以使用以下功能创建触发器。

选项2

CREATE TRIGGER dbo.changeStatus ON dbo.Poll_Question_Table AFTER
INSERT,
UPDATE AS
SET NOCOUNT ON;

DECLARE @pollEndDate datetime,
        @pollQuestionId int;


SELECT @pollQuestionId= i.PollQuestionId,
       @pollEndDate = i.PollEndDate
FROM Inserted i;


UPDATE dbo.Poll_Question_Table
SET PollStatus = dbo.dateLine(@pollEndDate)
WHERE PollQuestionId = @pollQuestionId and PollStatus = 1;

GO