我正在开展一个项目。基于生产服务器的备份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
---------------------------
答案 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)连接运算符。
提示:如果提出更多问题,错误消息会有所帮助。