首页 > 解决方案 > 在过程中使用 getdate 或触发 SQL

问题描述

我想知道如何GETDATE()在代码中使用以使其运行以及如何触发列中的特定内容。

我想检查SUPPLY_DATE表中日期类型的列SUPPLY是否与今天的日期相同。如果是,那么“今天供应”,如果不是“今天不供应”,我想我也遗漏了一些 if true 语句 (>1/>0),但不知道如何使用它来表示日期。

CREATE PROCEDURE P2
AS
BEGIN
    IF (SELECT * FROM SUPPLY WHERE SUPPLY_DATE = GETDATE())
    BEGIN 
        SELECT 'SUPPLY TODAY' AS SUPPLY
    END
    ELSE 
    BEGIN
        SELECT 'NO SUPPLY TODAY' AS SUPPLY
    END

    IF @@ERROR=0 SELECT 'OK' AS OK
END

对于触发器,我希望将其设置为:

  1. 插入检查表和特定列后

  2. 如果我添加具有不同主键但名称相同的内容,它将回滚

当我有这个触发器时,它不会让我在表 THINGS 中插入任何东西,而且我不确定如何告诉它检查特定列而不是整个表。

CREATE TRIGGER T3
ON THINGS
AFTER INSERT
AS 
IF EXISTS (SELECT * FROM THINGS)
BEGIN
    ROLLBACK
    RAISERROR('THERE IS A THING WITH THAT NAME',16,1);
END

标签: sqlsql-servertsqlstored-procedurestriggers

解决方案


对于您的第一个问题,您需要转换getdate()为日期,因为否则它具有时间组件并且仅在午夜等于日期数据类型。

SELECT *
FROM SUPPLY
WHERE SUPPLY_DATE = CAST(GETDATE() AS date)

IF @@ERROR=0 SELECT 'OK' AS OK

几乎不可能有错误。您是否意识到您正在向客户端返回 2 个数据集以获取 2 条信息?您可能需要考虑使用output参数和返回值,这无论如何都是最佳实践。

注意:将您的第二个问题作为一个新问题提出。


推荐阅读