2009-09-02 16 views
5

Tôi muốn sửa đổi một cột trong một máy chủ sql 2005 bảng thành IDENTITY (1,1)
Ngẫu nhiên bảng này trống và cột được thay đổi là khóa chính.
Cột này cũng là một khóa ngoại cho hai bảng khác.
sql máy chủ trợ giúp được lưu trữ thủ tục hoặc tiện ích cho thay đổi bảng thay đổi cột IDENTITY (1,1)

Sau khi googling tôi thấy rằng bạn không thể sử dụng cú pháp bảng thay đổi để sửa đổi một cột và biến nó thành cột thụt lề.
Liên kết # 1: How do I add the identity property to an existing column in SQL Server
Liên kết # 2: Adding an identity to an existing column -SQL Server

tôi đã kết thúc kiểm tra bảng phụ thuộc (2 trong số đó) loại bỏ các phím nước ngoài (tạo ra các kịch bản từ SSMS) sau đó thả bảng chính sau đó lại -tạo với bản sắc. (có thể thử tùy chọn đổi tên tại đây)
Sau đó tạo lại khóa ngoài cho hai bảng phụ thuộc trước đó.

Nhưng tất cả điều này là công việc thủ công, bất kỳ tập lệnh hoặc SP nào ngoài đó để làm việc này dễ dàng hơn.

Lý tưởng nhất là tất cả các bước sẽ được thực hiện bởi một kịch bản/công cụ/tiện ích như:

  1. Kiểm tra bảng phụ thuộc phím
  2. Tạo ra Tạo và thả các kịch bản nước ngoài chủ chốt cho việc này
  3. Tạo ra tạo tập lệnh cho bảng chính
  4. thả bảng chính (hoặc đổi tên bảng nếu bảng có dữ liệu)
  5. tái tạo bảng với cột sắc kích hoạt
  6. tái tạo phím nước ngoài

Trả lời

4

Bạn có thể sử dụng SSMS để tạo ra một kịch bản (Chỉnh sửa bảng, lưu script), nhưng nếu không nó là một quá trình thủ công như bạn đã xác định.

SSMS script sẽ nhận phụ thuộc vv. Đối với loại công việc này, tôi có xu hướng sử dụng SSMS để tạo tập lệnh cơ bản, pimp nó một chút, chạy nó cẩn thận, sau đó sử dụng công cụ so sánh (chẳng hạn như Red Gate compare) để tạo ra một phiên bản an toàn hơn.

Edit: The SSMS error is not an error, it's a safety check that can be switched off

+0

+1, có quá nhiều thứ cần thay đổi với bảng/cột/khóa/ràng buộc/v.v. nó sẽ không thể có một tiện ích cho mỗi. đó là lý do tại sao bạn có thể sử dụng GUI để tạo ra một kịch bản –

+1

SSMS ném một lỗi, đây là tùy chọn đầu tiên tôi đã thử. Nên có đề cập trong các câu hỏi ... –

+0

Cảm ơn các liên kết, vô hiệu hóa các tùy chọn làm việc như một say mê. –

2

(. Đây chỉ là một theo dõi bài gbn với biết thêm chi tiết - nó không phải là tất cả những gì dễ dàng để tìm công cụ này ra) (

Nó không phải là không thể viết một tiện ích để làm điều này, chỉ cần rất phức tạp và rất khó may mắn thay, Microsoft đã thực hiện nó - nó được gọi là SSMS (hoặc SMO?) để tạo ra một kịch bản như vậy:.

  • Trong Object. Explorer, đi sâu vào cơ sở dữ liệu và bảng mà bạn muốn sửa đổi Nhấp chuột phải và chọn Thiết kế

  • Thực hiện các thay đổi mong muốn cho một bảng trong màn hình thiết kế. Nó hợp lý trực quan.

  • Để thêm/xóa thuộc tính nhận dạng, hãy chọn cột trong ngăn trên và trong ngăn bên dưới/tab Thuộc tính cột, mở rộng và định cấu hình cài đặt trong "Đặc điểm nhận dạng".

  • Để tạo tập lệnh để thực hiện tất cả các thay đổi của bạn, kết hợp tất cả các thay đổi chính phụ thuộc, hãy nhấp vào nút thanh công cụ "Tạo thay đổi tập lệnh". Đây cũng là tùy chọn trong trình đơn "Trình thiết kế bảng".

tôi cũng làm điều này để tạo ra các kịch bản (mà sau này tôi sửa đổi -. SSMS không luôn tạo ra mã hiệu quả nhất) Khi đã xong, bạn có thể thoát ra ngoài mà không lưu thay đổi của bạn - để lại cho bạn một DB bạn có thể kiểm tra tập lệnh mới của mình.

+0

Cảm ơn, tôi không biết liệu tôi có nên đi chi tiết ... – gbn

+0

Tôi chỉ tình cờ gặp phải tính năng này từ lâu. Sáng sớm, tạo và xem lại các kịch bản lệnh này đã dạy tôi rất nhiều về SQL; sau này nó dẫn tôi đến nhiều cách làm thế nào để không viết SQL. (Tôi đoán mã được tạo ra bởi SSMS là - phải tương thích với SQL trở lại thông qua 7.0, và có lẽ trước đó?) –

+0

Đã thử điều này, trên thực tế đây là điều đầu tiên tôi đã thử. Tôi đưa ra lỗi "Lưu thay đổi không được phép, Những thay đổi bạn đã thực hiện yêu cầu bảng sau bị xóa ....... yêu cầu phải tạo lại bảng" –

0
  1. thả vn và xây dựng các kiểu dữ liệu cùng một cột
  2. sao chép dữ liệu của cột mà bạn muốn thiết lập bản sắc đến cột mới.
  3. thả các cột cũ
  4. reset chính chủ chốt

ALTER TABLE UserRole thả CONSTRAINT PK_XX ALTER TABLE XX

ADD newX int sắc không null (1,1) chính chủ chốt

cập nhật XX đặt newX = oldX

thay đổi bảng XX DROP COLUM N oldX

đây là cách đơn giản nhất để đặt cột nhận dạng. nếu bạn không muốn sử dụng tập lệnh được tạo dài.

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