SQL Server 2005:帮助连接Nvarchar和Int

时间:2016-08-20 22:37:16

标签: sql-server-2005 int nvarchar

我有一个错误的代码块,因为我在Int内使用了Nvarchar变量。

DECLARE @FattAnnoCorrente INT;
DECLARE @Tabscontianno1 NVARCHAR(MAX);

SET @Tabscontianno1 = 
N'<p align="left"><b>ANNO ' + @Anno1 + ' - </b><b>' + @FattAnnoCorrente + '<br>
  </b></p>
<table height="62" border="1" cellpadding="2" cellspacing="2"
  width="501">
  <tbody>
    <tr>
      <td valign="top">FATTURATO<br>
      </td>
      <td valign="top">SCONTO<br>
      </td>
    </tr>' + CAST ((
                    SELECT  
                    td = SUM(TOTNETTORIGA),    '',
                    td = SCONTIESTESI
                    FROM .dbo.TESTEDOCUMENTI 
                    INNER JOIN .dbo.RIGHEDOCUMENTI
                    ON PROGRESSIVO=IDTESTA AND TOTNETTORIGA <>'0'
                    WHERE  CODCLIFOR = @CodiceCliente AND .dbo.TESTEDOCUMENTI.DOCCHIUSO = '0' AND .dbo.TESTEDOCUMENTI.BLOCCATO = '0' AND .dbo.TESTEDOCUMENTI.TIPODOC = 'FVC'  AND .dbo.TESTEDOCUMENTI.ESERCIZIO = YEAR(GETDATE())
                    GROUP BY TESTEDOCUMENTI.ESERCIZIO,SCONTIESTESI
    FOR XML PATH('tr'), TYPE )
    AS NVARCHAR(MAX) ) +
    N'  </tbody>
</table>'+
    N'<BR/>' ;

我收到此错误:

  

将nvarchar值' ANNO 2016 - '转换为数据类型int时转换失败。

如果我使用

CAST(CAST(COALESCE(@FattAnnoCorrente) as int) as varchar(255))

我反而得到了这些错误:

  

Msg 102,Level 15,State 1,Line 154
  ')'附近的语法不正确。
  消息156,15级,状态1,行173   关键字“FOR”附近的语法不正确。

你能帮我解决这个问题吗?

将其插入nvarchar变量后,我需要将其格式化为金钱:

'€ ' + REPLACE(CONVERT(varchar, CAST(@FattAnnoCorrente AS money), 105),',','.')

谢谢你们!

1 个答案:

答案 0 :(得分:1)

您需要将所有INT类型投射到VARCHAR ..

在您的情况下,您首先将它们转换为INT ..

更改以下声明

CAST(CAST(COALESCE(@FattAnnoCorrente) as int) as varchar(255))

cast(COALESCE(@FattAnnoCorrente,'somevalue') as varchar(255))