在SQL的同一行上打印整数变量和字符串


80

好的,所以我在Technet上搜索了答案,但无济于事。

我只想打印与两个String变量串联的整数变量。

这是我的代码,无法运行:

print 'There are ' + @Number + ' alias combinations did not match a record'

看起来像是一个基本功能,我无法想象在T-SQL中是不可能的。但是,如果不可能,请这样说。我似乎找不到直接的答案。


2
print 'There are ' + CAST(@Number AS NVARCHAR(100)) + ' alias combinations did not match a record'
potashin

Answers:


131
declare @x INT = 1 /* Declares an integer variable named "x" with the value of 1 */
    
PRINT 'There are ' + CAST(@x AS VARCHAR) + ' alias combinations did not match a record' /* Prints a string concatenated with x casted as a varchar */

我喜欢演员表方法。简短而有趣,并且将原始变量保留为int,这是我需要的。

哈,我本来会马上接受的,但是再也不能让我再呆6分钟了。

8

数字的优先级高于字符串,因此,+操作员当然希望在添加之前将字符串转换为数字。

您可以这样做:

print 'There are ' + CONVERT(varchar(10),@Number) +
      ' alias combinations did not match a record'

或使用以下的(相当有限的)格式化工具RAISERROR

RAISERROR('There are %i alias combinations did not match a record',10,1,@Number)
WITH NOWAIT

感谢您提供背景信息。我没有意识到在执行简单的print语句时,T-SQL有太多的优先考虑。

1
@AdamJ-print本身与语句无关。T-SQL是一种非常简单的老式语言。在T-SQL中,运算符的所有输入都必须是同一类型。
Damien_The_Unbeliever,2014年

谢谢!我想我有时会忘记SQL是在70年代创建的。SQL Server的外观相当时尚(我认为),我认为这使它看起来比实际的更现代。

3

您不能将字符串和数字字符串组合在一起。您需要使用CONVERT或CAST将数字转换为字符串。

例如:

print 'There are ' + cast(@Number as varchar) + ' alias combinations did not match a record'

要么

print 'There are ' + convert(varchar,@Number) + ' alias combinations did not match a record'

2

仔细检查是否已设置要打印的int和十进制值的初始值

该样本正在打印一个空行

declare @Number INT
print 'The number is : ' + CONVERT(VARCHAR, @Number)

并且此示例正在打印->数字为:1

declare @Number INT = 1
print 'The number is : ' + CONVERT(VARCHAR, @Number)

1

你可以试试这个

declare @Number INT = 5                            
print 'There are ' + CONVERT(VARCHAR, @Number) + ' alias combinations did not match a record'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.