Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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/26.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 - Fatal编程技术网

Sql 条件语句不能正常工作

Sql 条件语句不能正常工作,sql,sql-server,Sql,Sql Server,为什么我总是有“错误”而“如果有”则没有 DECLARE @Date DATE = '2015-01-01' BEGIN TRY DECLARE @ROZNICA AS INT; SET @ROZNICA = DATEDIFF(day, @Date, getdate()); IF @ROZNICA = 0 BEGIN PRINT 'Data podana w parametrze jest datą bieżącą.'; END;

为什么我总是有“错误”而“如果有”则没有

DECLARE @Date DATE = '2015-01-01'

BEGIN TRY
    DECLARE @ROZNICA AS INT;
    SET @ROZNICA = DATEDIFF(day, @Date, getdate());

    IF @ROZNICA = 0
    BEGIN
        PRINT 'Data podana w parametrze jest datą bieżącą.';
    END;
    ELSE IF @ROZNICA > 0
    BEGIN
        PRINT 'Między datą obecną a datą ' + getdate() + ' jest ' + @ROZNICA + ' dni różnicy.';
    END;
    ELSE
    BEGIN
        PRINT 'Data podana w parametrze jest większa od bieżacej.';
    END;
END TRY
BEGIN CATCH
    PRINT 'Error';
END CATCH;
我希望显示If-Else语句中的某些内容

只需更改即可

'Między datą obecną a datą ' + getdate() + ' jest ' + @ROZNICA + ' dni różnicy.';

之所以出现这种情况,是因为将datetime强制转换为varchar时出错。 因此,您的代码将是

DECLARE @Date DATE = '2015-01-01'

BEGIN TRY
    DECLARE @ROZNICA AS INT;
    SET @ROZNICA = DATEDIFF(day, @Date, getdate());
    IF @ROZNICA = 0
      BEGIN
        PRINT 'Data podana w parametrze jest datą bieżącą.';
      END --Remove ; from here
    ELSE IF @ROZNICA >0
      BEGIN
        PRINT concat('Między datą obecną a datą ', getdate(), ' jest ', @ROZNICA, ' dni różnicy.');
      END -- Remove ; from here
    ELSE
      BEGIN
        PRINT 'Data podana w parametrze jest większa od bieżacej.';
      END;
END TRY
  BEGIN CATCH
    PRINT 'Error';
  END CATCH;
GO

如果不进行转换,则无法将日期或整数与varchar串联,因此需要:

 PRINT 'Między datą obecną a datą ' + cast(getdate() as varchar(10)) + ' jest ' + cast( @ROZNICA  as varchar(5))+ ' dni różnicy.';

如果您打算捕获错误,那么如果您所做的只是打印“错误”,您将如何知道发生了什么?学习调试自己的代码对于编写代码至关重要。
 PRINT 'Między datą obecną a datą ' + cast(getdate() as varchar(10)) + ' jest ' + cast( @ROZNICA  as varchar(5))+ ' dni różnicy.';