【问题标题】:Can't add a nvarchar to another无法将 nvarchar 添加到另一个
【发布时间】:2016-12-09 23:46:49
【问题描述】:

看看这段代码……我花了好几个小时……但还是不行!!!

DECLARE @Code NVARCHAR
DECLARE @MaxCode BIGINT = 81000
SELECT @Code = CONVERT(NVARCHAR,CONVERT(BIGINT,SUBSTRING(CONVERT(NVARCHAR,@MaxCode),2,LEN(CONVERT(NVARCHAR,@MaxCode) - 1)))+1)
SELECT N'D' + @Code,CONVERT(NVARCHAR,CONVERT(BIGINT,SUBSTRING(CONVERT(NVARCHAR,@MaxCode),2,LEN(CONVERT(NVARCHAR,@MaxCode) - 1)))+1)

有结果,你能相信吗:

D1 | 1001

我也尝试过SET,但没有任何改变

【问题讨论】:

  • 你想做什么,你期望的结果是什么?
  • 我确实期望 D1001 用于第一列。
  • This 回答有助于澄清事情。

标签: sql sql-server tsql


【解决方案1】:

试试:

DECLARE @Code NVARCHAR(2000)

看看会发生什么。

【讨论】:

  • @MohammadHosseinGhaebi 如果对您有帮助,请将其标记为答案。
【解决方案2】:

如果您没有指定Nvarchar长度,而声明Variable 默认1 将是它的长度

声明@Code NVARCHAR 将与@Code NVARCHAR(1) 相同


如果你没有在CAST/CONVERT中指定Nvarchar长度,默认30会是它的长度

SELECT @Code = CONVERT(NVARCHAR,..) 将与SELECT @Code = CONVERT(NVARCHAR(30),..) 相同


所以总是使用适当长度的NVARCHAR/Varchar

【讨论】:

    【解决方案3】:
    DECLARE @Code NVARCHAR(MAX)
    

    我使用 max 作为 SQL SERVER 只会为 char 的数量而不是固定数量的 char 保留内存,例如 DECLARE @Code NVARCHAR(1000)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2021-08-26
      相关资源
      最近更新 更多