2009-03-16 53 views
6

Tôi có một dự án tôi đang làm việc. dựa trên cơ sở dữ liệu SQL Server dự phòng từ một máy chủ sản xuất. Họ có hơn 16.000 địa chỉ email người dùng và tôi muốn làm hỏng chúng để hệ thống (có email tự động) sẽ không gửi bất kỳ email nào đến địa chỉ hợp lệ.Làm thế nào để nối chuỗi ở cuối một cột được cho trong SQL Server?

Nhưng tôi vẫn muốn người dùng, và tôi muốn họ theo cách mà tôi có thể đảo ngược những gì tôi làm (đó là lý do tại sao tôi không muốn xóa chúng).

SQL tôi đang cố gắng là:

CẬP NHẬT Liên SET
EmailAddress = EmailAddress + '.x'

Nhưng nó isnt làm việc, những gì tôi làm sai?

Thông báo lỗi như sau:

--------------------------- 
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

Một điều bạn đang làm sai là không nói những gì "không làm việc" có nghĩa là! –

Trả lời

7

Vấn đề là EmailAddress +".x" kết quả trong một số dữ liệu của bạn là để dài cho lĩnh vực nhất định. Bạn có thể làm:

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

Thay thế LENFIELD bằng chiều dài cột được xác định trên bảng. Nếu bạn chỉ muốn trộn dữ liệu tại sao không chỉ đặt tất cả các trường vào một địa chỉ email? Hoặc sửa đổi các hàng đang gây ra lỗi xảy ra ngắn hơn.

+0

Tôi khá chắc chắn rằng nó không - varchar (150) - nhưng tôi sẽ kiểm tra. – Ash

+0

Ok, do đó một hồ sơ được trả về khi tôi thực thi mã đó, nhưng nó phải có thêm khoảng trắng becasue không nó lâu như vậy. Tôi sẽ thử và cắt. – Ash

+0

Tôi Preety chắc chắn đó là những gì được thông báo lỗi có nghĩa – JoshBerke

-2

thử:

CẬP NHẬT Liên SET EmailAddress = EmailAddress || '.x';

|| là toán tử concatanation chuỗi (varchar) trong SQL.

GỢI Ý: Thông báo lỗi sẽ giúp ích nếu bạn đặt thêm câu hỏi.

+0

-1 cho '||' được sử dụng trong Oracle '+' được sử dụng trong SQL Server – bstoney

+0

hey bạn học một cái gì đó hàng ngày! – Martlark

6

Bạn có thể cụ thể hơn về bất kỳ lỗi nào bạn nhận được không? Tôi vừa mới lấy một ví dụ và nó hoạt động tốt.

Chỉnh sửa - Trường Email bạn đang cố gắng cập nhật đã gần với kích thước đầy đủ cho trường, để đảm bảo chỉnh sửa áp dụng cho tất cả bản ghi bắt buộc, bạn cần thay đổi thêm 2 thành kích thước cột cho trường đó

BTW Sql để chuyển đổi nó trở lại một lần nữa

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

có bạn đi, chúc mừng;) – Ash

-1

kết quả đầu tiên trên Google tìm kiếm được thông báo lỗi nói:

01.

"Chuỗi hoặc dữ liệu nhị phân sẽ bị cắt bớt" Lỗi MS Sql

Sự cố này xảy ra khi bạn cố gắng chèn vào trường một chuỗi vượt quá độ dài trường. Giải pháp duy nhất tôi có thể tìm thấy là đặt độ dài trường lớn hơn.

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

+0

Nhiều cách để có được kết quả mong muốn của địa chỉ email không hợp lệ không yêu cầu tăng độ dài trường. –

+0

Bạn đúng Aidan nhưng câu hỏi của OP là: "Nhưng nó không hoạt động, tôi đang làm gì sai?" – vmarquez

1

Dường như với tôi, việc thêm văn bản bổ sung sẽ làm cho một hoặc nhiều địa chỉ email dài hơn kích thước trường.Thay vì phụ thêm tại sao bạn không thay thế ký tự cuối cùng bằng một ký tự khác?

3

Các địa chỉ email đủ điều kiện này có @domain.name không? Trong trường hợp đó, bạn có thể sử dụng UPDATE ... SELECT REPLACE để thay đổi @ thành, say, *.

Các vấn đề liên quan