错误:字符串或二进制数据将被截断

时间:2011-09-22 00:15:44

标签: sql sql-server sql-server-2005

我写了一个如下查询。假设我在@Test表中有数据为“纽约和德克萨斯有CCRxSM federraly批准”。 Word CCRxSM是一个上标单词,但它没有作为上标加载。 SM应该像CCRx℠一样处于领先地位。

Declare @Test Table (Foo1 varchar(1023))
Insert @Test(Foo1) Values ('New York and Texas have CCRxSM federraly approved');
Select Foo1, 
 Case When Right(Foo1, 21) = 'SM'
  Then Left(Foo1, Len(Foo1) - 2) + NChar(8480) 
  Else Foo1 End
From @Test

当我运行我的查询时,我得到错误字符串或二进制数据将被截断。 我正在使用SQL SERVER 2005。

只是想要添加,如果我只是使用CCRxSM那么它的工作原理。所以不知道为什么它不能用于完整记录。

由于

3 个答案:

答案 0 :(得分:1)

您将列Foo1定义为最大长度为10,然后尝试在其中插入51个字符。显然它会截断。

CCRxSM对我来说并不看上标。这只是信件。上标和类似的东西都是格式化的。

答案 1 :(得分:1)

@Test表中的Foo1列只能是10个字符,所以当你运行insert语句时,它只会插入'New York a'。其余的将被截断。

您可以将其更改为

DECLARE @Test TABLE (Foo1 varchar(100))...

答案 2 :(得分:1)

试试这个:

Declare @Test Table (Foo1 nvarchar(1023))
Insert @Test(Foo1) Values ('New York and Texas have CCRxSM federraly approved');
Select Foo1, REPLACE(foo1,'xSM','x'+nchar(8480)) as updatedFoo1
From @Test

您的查询

  Declare @Test Table (Foo1 varchar(1023))
    Insert @Test(Foo1) Values ('New York and Texas have CCRxSM federraly approved');
    Select Foo1, 
     Case When Right(Foo1, 21) = 'SM'
      Then Left(Foo1, Len(Foo1) - 2) + NChar(8480) 
      Else Foo1 End
    From @Test

根据代码,右边(foo1,21)是 SM federraly approved ,而不仅仅是 SM 另外,请记住,如果你在查询分析器中运行它,请确保查询结果是Unicode字体,以便您可以看到SM上标。