我正在使用SQL Server 2012,我有一个表Accounts
:
[ClientId] | [AccNumber] | [AccBalance]
此查询正常工作:
SELECT TOP 5
[ClientId]
,[AccNumber]
,[AccBalance]
FROM [MyDB].[dbo].[Accounts]
但所有这些都是表Accounts
包含的列。现在我想添加另一个列,它将返回一些最终应该看起来像描述每个帐户的简短文本。
或者更清楚一点,我试图补充一下:
SELECT TOP 5
[ClientId]
,[AccNumber]
,[AccBalance]
,('Client Number = ' + [ClientId] + 'Account Number = ' + [AccNumber] + 'Account Balance = ' + [AccBalance]) as txt
FROM [MyDB].[dbo].[Accounts]
但是,当我尝试在SQL Server Management Studio中执行此操作时,出现此错误:
转换varchar值'Client Number ='时转换失败 数据类型int。
有没有办法让它有效?
答案 0 :(得分:3)
SQL Server不会自动将INT
或DECIMAL
转换为字符串 - 您需要明确地执行此操作:
SELECT TOP 5
[ClientId]
,[AccNumber]
,[AccBalance]
,('Client Number = ' + CAST([ClientId] AS VARCHAR(10)) +
'Account Number = ' + CAST([AccNumber] AS VARCHAR(20)) +
'Account Balance = ' + CAST([AccBalance] AS VARCHAR(20)) as txt
FROM [MyDB].[dbo].[Accounts]
如果您没有明确指定任何内容,T-SQL将尝试将所有内容转换为排名最高的数据类型 - 而INT
比VARCHAR
更“重要”(排名更高),所以T -SQL将尝试将您的字符串文字转换为INT
(显然会失败)
有关数据类型如何排名的完整列表,请参阅MSDN docs on datatype precedence
答案 1 :(得分:1)
这是由于(我假设)你的clientId,accNumber,accBalance(或它们的任意组合)属于int类型。你可以通过以下方式完成你的需要:
SELECT TOP 5
[ClientId]
,[AccNumber]
,[AccBalance]
,('Client Number = ' + convert(varchar(50), [ClientId]) + 'Account Number = ' + convert(varchar(50),[AccNumber]) + 'Account Balance = ' + convert(varchar(50),[AccBalance])) as txt
FROM [MyDB].[dbo].[Accounts]
作为一个例子。
另一种(我认为更好)的方法是在UI上执行此操作,因为构建字符串的所有信息都已经位于您的行/对象中。