我正在尝试使用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
答案 0 :(得分:4)
不确定这是否仅仅是因为SO上的格式化,但对我来说,看起来你正试图在字段中插入大约80个字符的空格,使你的总字符数最多为1080.
此外,LEN
不计算尾随空格(是的,这很糟糕)。
答案 1 :(得分:1)
我真的需要我的1000个角色。如何加载此数据?
一个解决方案/解决方法是从字符串中删除空格,回车符和换行符:
replace(replace(replace( <your string> ', ' ', ''), char(10),''), char(13), '')
将此应用于您的样本数据(使用空白)可以插入nvarchar(1000)
。
如果你想保持字符串不变,使用空格和CR/LF
,显而易见的解决办法是改变表格以允许更长的字符串,可能是nvarchar(max)
。
答案 2 :(得分:0)