Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如果一个条件在运行中失败,但仍必须选择记录,该怎么办?_Sql_Sql Server_Tsql_Sql Server 2014 - Fatal编程技术网

Sql 如果一个条件在运行中失败,但仍必须选择记录,该怎么办?

Sql 如果一个条件在运行中失败,但仍必须选择记录,该怎么办?,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,我试图只挑选那些在OPENINGDATE和GETDATE之间datediff为 声明@NotificationAllowed位 Set@NotificationAllowed=ISNULLSelect NotificationAllowed来自角色,其中RoleID=@RoleID,0 如果@NotificationAllowed=1 开始 选择@NotificationAllowed作为允许,Works.NIT_No,Works.WorkNo,Works.WorkName,DATEDIFFda

我试图只挑选那些在OPENINGDATE和GETDATE之间datediff为 声明@NotificationAllowed位 Set@NotificationAllowed=ISNULLSelect NotificationAllowed来自角色,其中RoleID=@RoleID,0 如果@NotificationAllowed=1 开始 选择@NotificationAllowed作为允许,Works.NIT_No,Works.WorkNo,Works.WorkName,DATEDIFFday,Convertdate,GETDATE,Works.OpeningDate作为TotalDays保留 ,Convertvarchar11,Works.OpeningDate,106作为OpeningDate 从作品 其中DATEDIFFday、Convertdate、GETDATE、Works.OpeningDate介于0和3之间 和 CONVERTvarchar5,Works.OpeningTime,108>CONVERTvarchar5,GETDATE,108 和 Works.Organization\u ID=Case当@RoleID=1时,则Works.Organization\u ID ELSE@OrgID end 终止 其他的 开始 选择0作为允许,选择NIT_No、选择WorkNo、选择WorkName、选择TotalDaysRemaining,选择null作为OpeningDate 终止
只需将这两个日期条件与OR组合即可。我还更改了Datediff功能,使其不再具有另一个功能,而不会使其变得更复杂。

到目前为止,您尝试了什么?为什么不将AND和OR与要检查的条件结合使用呢?你可以简单地在一个表达式中写两次相同的条件,比如A和B,或者A和C,或者不是B和C。另外,将日期转换为文本来比较它们会增加不必要的工作。自2008年以来,这种方法一直奏效:将[MyDate]作为时间来使用
Declare @NotificationAllowed bit
    Set @NotificationAllowed= ISNULL((Select NotificationAllowed from Roles where RoleID= @RoleID),0)

    IF @NotificationAllowed=1
    BEGIN
        Select  @NotificationAllowed as IsAllowed, Works.NIT_No, Works.WorkNo, Works.WorkName, DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) as TotalDaysRemaining 
                ,Convert(varchar(11), Works.OpeningDate, 106) as OpeningDate
        from Works
        Where DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) <=3
        AND 
        DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) >=0
        AND 
        CONVERT(varchar(5), Works.OpeningTime, 108) >  CONVERT(varchar(5), GETDATE(), 108) 
        AND
        Works.Organization_ID= Case When @RoleID=1  then Works.Organization_ID ELSE @OrgID end 
    END 
    ELSE
    BEGIN
        Select  0 as IsAllowed, '' AS NIT_No, ''  AS WorkNo, '' AS WorkName, '' as TotalDaysRemaining, null as OpeningDate
    END
Declare @NotificationAllowed bit
    Set @NotificationAllowed= ISNULL((Select NotificationAllowed from Roles where RoleID= @RoleID),0)

    IF @NotificationAllowed=1
    BEGIN
        Select  @NotificationAllowed as IsAllowed, Works.NIT_No, Works.WorkNo, Works.WorkName, DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) as TotalDaysRemaining 
                ,Convert(varchar(11), Works.OpeningDate, 106) as OpeningDate
        from Works
        Where (DATEDIFF(day, Convert(date,GETDATE()), Works.OpeningDate) BETWEEN 0 and 3
        OR
        CONVERT(varchar(5), Works.OpeningTime, 108) >  CONVERT(varchar(5), GETDATE(), 108)) 
        AND
        Works.Organization_ID= Case When @RoleID=1  then Works.Organization_ID ELSE @OrgID end 
    END 
    ELSE
    BEGIN
        Select  0 as IsAllowed, '' AS NIT_No, ''  AS WorkNo, '' AS WorkName, '' as TotalDaysRemaining, null as OpeningDate
    END