2014-12-02 80 views
0
UPDATE SOP60300 
SET SOP60300.CUSTITEMDESC = IV00101.ITEMDESC 
FROM IV00101 
WHERE IV00101.ITEMNMBR = SOP60300.ITEMNMBR 

我需要更新项目描述中的客户描述。当我运行上面的脚本时,它给了我下面的错误信息。客户描述可以容纳的MAX是CHAR 51,项目描述是CHAR 101.我只想从声明中运行最后的50个CHAR。需要截断数据

应当指出的是,我使用的SQL Server 2008R2

Msg 8152, Level 16, State 14, Line 2
String or binary data would be truncated.

+1

什么数据库?正确的答案取决于支持的SQL方言,这意味着我们需要知道您使用的数据库。你应该[编辑]你的问题,并为DBMS添加一个额外的标签。 – 2014-12-02 23:01:01

回答

0

你也可以使用LEFT。这相当于SUBSTRING(colName, 1, 1)LEFT以指定的字符数返回字符串的左边部分。

SET SOP60300.CUSTITEMDESC = LEFT(IV00101.ITEMDESC, 50) 

所以它从列的值中取前50个字符。

我喜欢LEFT,因为我觉得它有点干净,但实际上,两种方式都没有区别。

SQL小提琴在SQL SERVER 2008: - http://sqlfiddle.com/#!3/ad609/1

+0

工作。我是新人,但我喜欢这份工作的人。谢谢Piyush – 2014-12-02 23:18:03

+0

@John - 伟大的人,它能帮助你。 – HaveNoDisplayName 2014-12-02 23:18:57

-1
SET SOP60300.CUSTITEMDESC = substring(IV00101.ITEMDESC,1,50) 

类似的东西... (注意保持你更新的其余部分是相同的)

+0

downvoter可能会解释为什么SUBSTR不是正确的答案..? – Randy 2014-12-02 23:05:51

+0

谢谢,但我在SQL 2008R2。 substr不起作用。 – 2014-12-02 23:12:16

+0

在SQL Server 2008中,它会抛出错误: - 'SUBSTR'不是公认的内置函数名称。 – HaveNoDisplayName 2014-12-02 23:16:13