我有这个SQL:
DECLARE @HTMLROWSSingle NVARCHAR(MAX)
DECLARE @UnrecoveredPercentageOfTotalContract decimal(18,2)
DECLARE @ContractTerm NVARCHAR(20)
SET @ContractTerm = 2
SET @UnrecoveredPercentageOfTotalContract = 1
SET @HTMLROWSSingle = '<tr>' + CASE WHEN @ContractTerm = 2
THEN @UnrecoveredPercentageOfTotalContract * .50
ELSE 1
END + '</tr>'
Select @HTMLROWSSingle
我收到错误:
将数据类型varchar转换为数字
时出错
如果我将SQL更改为
SET @HTMLROWSSingle = CASE WHEN @ContractTerm = 2
THEN @UnrecoveredPercentageOfTotalContract * .50
ELSE 1
END
我能够获取数据。我不确定我在这里做错了什么。
这是小提琴http://sqlfiddle.com/#!6/ca0ba/2836
由于
答案 0 :(得分:3)
您正在尝试将字符串与数字组合在一起。您还需要将数字转换为字符串。尝试
DECLARE @HTMLROWSSingle NVARCHAR(MAX)
DECLARE @UnrecoveredPercentageOfTotalContract decimal(18,2)
DECLARE @ContractTerm NVARCHAR(20)
SET @ContractTerm = 2
SET @UnrecoveredPercentageOfTotalContract = 1
SET @HTMLROWSSingle = '<tr>'+ CAST(Case When @ContractTerm = 2
Then
@UnrecoveredPercentageOfTotalContract * .50 Else 1 End as nvarchar(50)) +
'</tr>'
Select @HTMLROWSSingle
答案 1 :(得分:3)
使用某些计算时,应始终使用正确的数据类型。在这种情况下,您尝试直接将字符串与十进制值连接,从而获得转换错误。 你应该使用这样的东西:
DECLARE @HTMLROWSSingle NVARCHAR(MAX);
DECLARE @UnrecoveredPercentageOfTotalContract decimal(18,2);
DECLARE @ContractTerm NVARCHAR(20);
SET @ContractTerm = N'2';
SET @UnrecoveredPercentageOfTotalContract = 1
SET @HTMLROWSSingle = '<tr>'+
Case
When @ContractTerm = N'2'
Then CONVERT(NVARCHAR(18),@UnrecoveredPercentageOfTotalContract*.50)
Else N'1'
End +'</tr>';
Select @HTMLROWSSingle;
答案 2 :(得分:1)
您只需要将这些值转换为varchar/char
,因为您正在尝试连接这些值:
DECLARE @HTMLROWSSingle NVARCHAR(MAX)
DECLARE @UnrecoveredPercentageOfTotalContract decimal(18,2)
DECLARE @ContractTerm NVARCHAR(20)
SET @ContractTerm = 2
SET @UnrecoveredPercentageOfTotalContract = 1
SET @HTMLROWSSingle = '<tr>'+ Case When @ContractTerm = 2 Then cast(@UnrecoveredPercentageOfTotalContract * .50 as nvarchar(10)) Else cast(1 as nvarchar(1)) End + '</tr>'
Select @HTMLROWSSingle
答案 3 :(得分:0)
试试这个:
DECLARE @HTMLROWSSingle NVARCHAR(MAX)
DECLARE @UnrecoveredPercentageOfTotalContract decimal(18,2)
DECLARE @ContractTerm NVARCHAR(20)
SET @ContractTerm = '2'
SET @UnrecoveredPercentageOfTotalContract = 1
SET @HTMLROWSSingle = '<tr>' +
CASE
WHEN @ContractTerm = '2'
Then
TRY_CONVERT(VARCHAR(MAX), @UnrecoveredPercentageOfTotalContract * .50 )
ELSE TRY_CONVERT(VARCHAR(2),1)
END + '</tr>'
Select @HTMLROWSSingle