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.';