2010-12-28 44 views
7

Tôi muốn lấy chi tiết của tất cả các chỉ mục, khóa và khóa ngoài từ cơ sở dữ liệu trong SQL Server (2008). Làm thế nào để tôi làm điều này?Cách viết chỉ mục, khóa, khóa ngoài trong SQL Server

Tôi định sử dụng tính năng này để đồng bộ hóa các thuộc tính đó trên một vài cơ sở dữ liệu tương tự.

Tôi có thể sử dụng SQL Server Management Studio, nhưng tôi không thể sao lưu toàn bộ cơ sở dữ liệu do các hạn chế do trình thu thập dữ liệu web đặt ra.

-

câu hỏi thứ mà bạn không cần phải trả lời:

Tại sao không thể có được một cái gì đó tương tự như cấu trúc CSDL trong Mysql mà chỉ đơn giản liệt kê tất cả các cấu trúc cơ sở dữ liệu trong kịch bản SQL văn bản định dạng?

+0

Tôi muốn thực hiện việc này từ tập lệnh. Trong Mysql tôi sẽ làm "show create table exampletablename" cho mỗi bảng. – tomsv

Trả lời

6

Giả sử bạn đang sử dụng ít nhất SQL Server 2005 trở lên, bạn có thể sử dụng Database Publishing Wizard để kịch bản giản đồ của bạn

này có thể được sử dụng để tạo kịch bản cho chỉ lược đồ, dữ liệu hoặc cả hai.

Nó tích hợp trực tiếp vào Visual Studio 2005 và/hoặc Visual Web Developer 2005

Nếu bạn đang sử dụng VS2008, phiên bản v1.2 của SQL Publishing Wizard được cài sẵn. Bạn có thể kiểm tra here nơi để gọi nó từ.

+0

+1, điều đó thật tuyệt. –

+0

tôi nhận được một lỗi từ này khi tôi cố gắng xuất bản schema: der Status Datenbankveröffentlichung - Danh mục nhãn der Objekte für chết Skripterstellung wird zusammengestellt (Erfolg) - Skripterstellung für Objekte (Fehler) Meldungen Operation là không hợp lệ do trạng thái hiện tại của đối tượng. (SqlPubWiz) - Skript wird auf den Datenträger geschrieben (Beendet) (Xin lỗi vì thông báo lỗi của Đức) – tomsv

+0

bạn có đang chạy nó từ dòng lệnh hoặc thông qua VS không? – InSane

1

Là một giải pháp thay thế cho câu trả lời hoàn hảo của InSane, bạn có thể nhấp chuột phải vào bất kỳ đối tượng nào trong SSMS để tập lệnh vào tệp văn bản hoặc cửa sổ.
Một vài sản phẩm miễn phí và không miễn phí cũng cho phép bạn thực hiện điều này, bao gồm WinSQL.

2

Nếu bạn cần phải nhận được kịch bản từ T-SQL sau đó chỉ sử dụng xp_cmdshell. Ví dụ kịch bản chỉ số concreate của xem concreate với SMO và PowerShell (kết quả là trong biến @script, bạn có thể thực hiện nó với sp_executesql):

DECLARE @OUTPUT TABLE (line nvarchar(max)) 
DECLARE @cmd VARCHAR(8000), @ps VARCHAR(8000), @psLoadAssemblies VARCHAR(8000), @script nvarchar(max) ='' 
DECLARE @srv nvarchar(max)='<server name>', 
     @ln nvarchar(max)='<login>', 
     @pw nvarchar(max)='<password>', 
     @db nvarchar(max) = '<database>', 
     @schemaName nvarchar(max) = '<schema>', -- without '[' ']' 
     @viewName nvarchar(max) = '<view name>', -- without '[' ']' 
     @indexName nvarchar(max) = '<index name>' -- without '[' ']' 

SET @psLoadAssemblies = '[System.Reflection.Assembly]::LoadWithPartialName(''Microsoft.SqlServer.SMO'')|Out-Null;' 
SET @ps='$using=''Microsoft.SqlServer.Management.Smo'';$s=new-object($using+''.Server'') $srv;$c = $s.ConnectionContext;$c.LoginSecure=$false;$c.Login=$ln;$c.Password=$pw; Write-Host ($s.Databases[$db].Views.Item($viewName,$schemaName).Indexes[$indexName].Script())' 
SET @ps=REPLACE(@ps,'$srv',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$ln',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$pw',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$db',''''[email protected]+'''') 

SET @ps=REPLACE(@ps,'$schemaName',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$viewName',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$indexName',''''[email protected]+'''') 

SET @cmd = 'powershell -Command "'[email protected][email protected]+'"' 
exec dev.Msg @cmd 
INSERT INTO @OUTPUT 
exec xp_cmdshell @cmd 

SELECT @script+line FROM @OUTPUT 
WHERE line is not null 

PRINT @script 

T.B. Đối với những người hỏi lý do tại sao chúng tôi có thể cần các thủ thuật như vậy: trong một số trường hợp, ví dụ: "nhập dữ liệu bằng công cụ của bên thứ ba", cách tiếp cận "thả lại" hoạt động tốt hơn các đối tượng "bật tắt", ví dụ: vì công cụ của bên thứ ba có thể gọi là "cắt bớt" và nếu bảng của bạn tham gia chế độ xem lược đồ, bạn sẽ gặp lỗi công cụ của bên thứ ba (bảng cắt bớt tham gia vào các chế độ xem được lập chỉ mục sẽ phát sinh lỗi, do đó chúng tôi buộc phải bỏ chế độ xem với tất cả các chỉ mục trước khi nhập và tạo lại sau).

0

Tôi đã thấy nhận xét hoặc trả lời của người dùng "dontomoso". Sau khi dịch sang tiếng Anh có vẻ như là "Hoạt động không hợp lệ do trạng thái hiện tại của đối tượng. (SqlPubWiz)" trong "thuật sĩ xuất bản cơ sở dữ liệu" là lỗi có kinh nghiệm.

Sau rất nhiều thử nghiệm và thử nghiệm, trong ứng dụng này. tên cơ sở dữ liệu phân biệt chữ hoa chữ thường. Đặt giá trị trường hợp chính xác cho tham số -d.Giải pháp đơn giản, thay đổi tên lược đồ mặc định hoặc tên Catalogue ban đầu giống như "được sử dụng trong khi tạo DB". Ví dụ. Trong khi tạo ra nếu playGround được sử dụng, sử dụng playGround ở đây quá ... Sân chơi hoặc sân chơi hoặc PlayGround sẽ tạo ra lỗi này.

Tôi hy vọng sự trợ giúp này!

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