这是我的sql表
create table Poll_Question_Table (
PollQuestionId int primary key,
PollQuestionTex varchar(max),
PollStatus int ,
PollStartDate date,
PollEndDate date
)
如果当前日期使用函数或触发器通过结束日期(日期行),我想将状态值从1更改为0 ..... tnx为您提供帮助
答案 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