2010-01-05 34 views
6

Tôi có một cơ sở dữ liệu trong đó tất cả các bảng được đặt trước bằng một tập hợp các ký tự giống nhau. Điều này đã được thực hiện bởi vì tại một thời điểm họ đã được trong một cơ sở dữ liệu được chia sẻ thiết lập cho các dự án thú cưng với hàng trăm bảng khác. Ứng dụng, và do đó cơ sở dữ liệu, bây giờ đã sẵn sàng để được chuyển ra khỏi giai đoạn đó và sẵn sàng để được ra trên riêng của nó. Tôi muốn loại bỏ tiền tố cho mỗi bảng. Có cách nào dễ hơn để thực hiện việc này thay vì nhấp chuột phải và đổi tên từng bảng riêng lẻ?Đổi tên tất cả các bảng trong cơ sở dữ liệu

+1

Tôi đã tạo cơ sở dữ liệu mới, với lược đồ đặt tên mới cho các bảng mới và chọn dữ liệu trên đó. –

+0

Hãy xem điều này quá - "Đổi tên hàng loạt các bảng và các thủ tục được lưu trữ" http://stackoverflow.com/questions/1098585/mass-renaming-of-tables-and-stored-procedures – Bratch

Trả lời

2

Bạn có thể làm điều gì đó như kịch bản toàn bộ cơ sở dữ liệu và thực hiện thay thế chuỗi trên tập lệnh, chạy nó trên cơ sở dữ liệu mới, sau đó nhập dữ liệu. Điều này tất nhiên phụ thuộc vào cách bạn có thể phù hợp với chuỗi được thay thế. Bạn cũng có thể phải thực hiện các thay đổi tương ứng trong ứng dụng của mình. Bạn luôn có thể thử một cái gì đó như thế này trên một cơ sở dữ liệu thử nghiệm để xem nếu nó sẽ làm việc.

Hãy xem này quá - Mass Renaming of Tables and Stored Procedures

Một phương pháp có một số chi phí và người kia cũng tương tự như đề nghị của tôi.

+0

@Bratch +1 một cách đẹp hơn nhiều để nói những gì tôi đã nói. – Hogan

+1

@Hogan Yeah, nhưng khác nhau.Câu trả lời của bạn có vẻ giống như viết một kịch bản để sửa đổi dữ liệu meta. Tôi không nói rằng bạn cần phải viết một kịch bản nào cả, chỉ cần viết kịch bản ra khỏi cơ sở dữ liệu như các lệnh SQL (Nhấp chuột phải, Tác vụ, Tạo tập lệnh). Thực hiện tìm/thay thế và thay thế tiền tố bằng không có gì, và sau đó chạy SQL đã sửa đổi trên cơ sở dữ liệu mới. Điều này sẽ đổi tên tất cả các tham chiếu đến các bảng trong khung nhìn và sprocs. Một cái nhìn nhanh về SQL được tạo bởi kịch bản lệnh db sẽ đưa ra một ý tưởng nếu nó hoạt động đúng hay không. – Bratch

4

Bạn có thể viết kịch bản để xem thông tin meta và thay đổi nó, nhưng điều này sẽ không làm hỏng tất cả SP và Truy vấn tham số của bạn?

+1

Nó sẽ hủy hoại mọi thứ - lượt xem , vv Nếu có SCHEMABINDING trên bất cứ điều gì, đó sẽ phải được xử lý đầu tiên ... –

0

Trước tiên, hãy viết một thủ tục lưu sẵn có tham số tên bảng và sử dụng phân tích cú pháp chuỗi và ALTER TABLE để loại bỏ tiền tố khỏi bảng được chỉ định.

Sau đó, sử dụng sp_MSforeachtable để gọi thủ tục đó cho mỗi bảng.

tham khảo: http://weblogs.sqlteam.com/joew/archive/2007/10/23/60383.aspx

9
select 'exec sp_rename @objname=' + name + ', @newname=' + replace(name ,'prefixedchars', '') 
from sysObjects 
where type = 'U' 

Kết quả từ này sẽ là một cái gì đó như:

exec sp_rename @objname=prefixedcharsTable1, @newname=Table1 
exec sp_rename @objname=prefixedcharsTable2, @newname=Table2 
exec sp_rename @objname=prefixedcharsTable3, @newname=Table3 
etc... for each table in your db 

Tất cả bạn phải làm là sao chép các báo cáo vào một cửa sổ truy vấn mới và chạy.

Hãy cẩn thận:

  • Bạn sẽ nhận được một thông báo cảnh báo như sau: Caution: Changing any part of an object name could break scripts and stored procedures.
  • Bạn sẽ phải đổi tên các bảng trong bất kỳ thủ tục lưu trữ, chức năng, quan điểm, và gây nên.
+0

Đây là một giải pháp tuyệt vời vì bạn có thể xem kịch bản đổi tên trước khi nó chạy. –

0

Hoàn toàn từ góc nhìn "thay thế cho nhấp chuột phải, đổi tên" (không đổi tên tài liệu tham khảo, quy trình, chế độ xem, v.v.) - trộn lên một chút. Lấy danh sách các bảng:

select name from sys.Tables 

sao chép và qua nó vào emacs (hoặc biên tập dòng regex yêu thích của bạn) và chạy một dòng thay thế regex: tìm kiếm \(xyz.*\) và thay thế bằng SP_RENAME 'xyz\1', '\1'; này repalces các xyzFoo bảng với Foo. Dán các dòng trở lại vào SQL Server và chạy nó.

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