如何在SQL Server中的给定列的末尾追加字符串?

时间:2009-03-16 01:54:29

标签: sql sql-server

我正在开展一个项目。基于生产服务器的备份SQl Server数据库。他们有超过16,000个用户电子邮件地址,我想破坏他们,因此系统(有自动电子邮件)不会向有效地址发送任何电子邮件。

但是我仍然想要用户,我希望他们以我可以改变我做的方式(这就是为什么我不想删除它们)。

我正在尝试的SQL是:

  

更新联系人SET   EmailAddress = EmailAddress +'。x'

但它不起作用,我做错了什么?

错误消息如下:

---------------------------
Microsoft SQL Server Management Studio Express
---------------------------
SQL Execution Error.

Executed SQL statement: UPDATE Contact SET EmailAddress = EmailAddress + '.x'
Error Source: .Net SqlClient Data Provider
Error Message: String or binary data would be truncated. The statement has been terminated.
---------------------------
OK   Help   
---------------------------

6 个答案:

答案 0 :(得分:7)

问题是EmailAddress +".x"导致某些数据对于给定字段而言很长。你可以这样做:

select * from Contact where len(EmailAddress +".x") > LENFIELD

将LENFIELD替换为表中定义的列的长度。如果您只想清除数据,为什么不将所有字段设置为单个电子邮件地址?或者修改导致错误发生的行更短。

答案 1 :(得分:6)

您可以更具体地了解您获得的任何错误吗?我刚刚敲了一个例子,它运行正常。

编辑 - 您尝试更新的EmailAddress字段已经接近该字段的完整大小,为了确保编辑适用于所有必需的记录,您需要将add 2更改为该字段的列大小< / p>

BTW Sql将其转换回来

update Contact 
set EmailAddress = SUBSTRING(EmailAddress , 0 , len(EmailAddress ) - 1)
where SUBSTRING(EmailAddress , len(EmailAddress ) - 1, 2) = '.x'

答案 2 :(得分:3)

这些完全限定的电子邮件地址是@domain.name吗?在这种情况下,您可以使用UPDATE ... SELECT REPLACE将@更改为,例如,*。

答案 3 :(得分:1)

在我看来,添加额外文本会使一个或多个电子邮件地址长于字段大小。而不是追加为什么不用最后一个字符替换另一个字符?

答案 4 :(得分:-1)

Google搜索错误消息的第一个结果是:

“字符串或二进制数据将被截断”MS Sql错误

当您尝试向字段插入超出字段长度的字符串时,会发生此问题。我能找到的唯一解决方案是设置更大的字段长度。

参考:http://www.dotnetjunkies.com/WebLog/skiff/archive/2005/01/31/49336.aspx

答案 5 :(得分:-2)

尝试:

更新联系人SET EmailAddress = EmailAddress || '.X';

||是SQL中的字符串(varchar)连接运算符。

提示:如果提出更多问题,错误消息会有所帮助。