为什么SQL会截断我的数据?

时间:2014-09-04 13:53:52

标签: sql sql-server-2008 truncate

我正在尝试使用SSMS(SQL Server 2008)将数据插入到定义为nvarchar(1000)的字段中。它不允许我输入长度为1000个字符的文字。我收到了消息:

  

Msg 8152,Level 16,State 4,Line 1字符串或二进制数据   截断。声明已经终止。

如果我将它缩短为850个字符,它会执行插入操作,但使用LEN()会显示它已将数据截断为749个字符。

我真的需要我的1000个角色。如何加载这些数据?

这是我的剧本:

    INSERT INTO [OnsiteV3].[dbo].[SQLPendingEvent]
       ([KeyDeviceID]
       ,[UpdateTime]
       ,[EventClass]
       ,[EventCode]
       ,[EventType]
       ,[EventDateTime]
       ,[KeyPropertyID]
       ,[KeyEntityID]
       ,[EventText]
       ,[KeyUserID]
       ,[EventImage]
       ,[TaskType]
       ,[TaskSubType]
       ,[UniqueTaskID])
 VALUES
       ('SVS-IMPL-DARREN'
       ,GETDATE()
       ,'REPAIR'
       ,'NOTE'
       ,'ADD'
       ,GETDATE()
       ,1003443
       ,10812
       ,'1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
       '
       ,'DARRENWORK'
       ,NULL
       ,NULL
       ,NULL
       ,'hsg00010812000P')

GO

3 个答案:

答案 0 :(得分:4)

不确定这是否仅仅是因为SO上的格式化,但对我来说,看起来你正试图在字段中插入大约80个字符的空格,使你的总字符数最多为1080.

此外,LEN不计算尾随空格(是的,这很糟糕)。

答案 1 :(得分:1)

我真的需要我的1000个角色。如何加载此数据?

一个解决方案/解决方法是从字符串中删除空格,回车符和换行符:

replace(replace(replace( <your string> ', ' ', ''), char(10),''), char(13), '')

将此应用于您的样本数据(使用空白)可以插入nvarchar(1000)

如果你想保持字符串不变,使用空格和CR/LF,显而易见的解决办法是改变表格以允许更长的字符串,可能是nvarchar(max)

Sample SQL Fiddle

答案 2 :(得分:0)