Buat skrip seluruh database SQL-Server

95

Adakah cara agar saya bisa mendapatkan skrip dari semua tabel, procs, dan objek lain dari database? Saya tahu ada opsi untuk membuat skrip database tetapi itu hanya memberi saya semacam skrip tingkat atas, tentu saja bukan skrip untuk membuat semua tabel, procs, udfs, .etc.

PositiveGuy
sumber
6
Dia menandainya SQL Server 2008, jadi saya berasumsi itulah yang dia gunakan.
Colin Mackay
1
Bukankah ini seharusnya pergi ke serverfault.com?
Salamander2007

Jawaban:

163

Dari Management Studio Klik kanan database Anda. Tugas -> Hasilkan Skrip.

Itu harus dilakukan.

Chris Brandsma
sumber
2
Pilihan lain adalah dengan menggunakan SQL SMO dan skrip keluar secara programatik (yaitu jika skrip biasa diperlukan)
RobS
Adakah cara untuk menyiapkan skrip untuk melakukan ini sehingga setelannya selalu sama, siapa pun yang menjalankannya? Saya memperkirakan orang-orang di tim pengembang kami menimpa file ini dengan pengaturan yang berbeda setiap kali ...
Joe Phillips
@ Joe, saya akan menelusuri rute yang dibicarakan RobS. Anda harus dapat melakukannya dengan PowerShell. Jika tidak, mulailah melihat alat RedGate, atau Sistem Tim Visual Studio dengan Pengembang Database.
Chris Brandsma
7
Secara default, ini tidak membuat skrip data. Di bawah Table / View Options pilih "Script Data -> True". Opsi lain yang berguna adalah "Script Drop -> True"
Stephen Hosking
1
Skrip yang dihasilkan tidak akan berisi informasi apa pun tentang susunan kolom, kecuali Anda telah memilih opsi terakhir di menu Ekstra> Opsi> Pembuatan skrip. Dalam bahasa Jerman, opsinya adalah "Sortierung einschließen". Bahkan dari sebagian besar opsi ini disertakan dalam wizard yang menghasilkan skrip, yang ini tidak (SQL Server 2008). Anda benar-benar harus memilih opsi sebelum memanggil wizard.
Olivier Faucheux
14

Saya menulis utilitas baris perintah open source bernama SchemaZen yang melakukan ini. Ini jauh lebih cepat daripada membuat skrip dari studio manajemen dan keluarannya lebih ramah kontrol versi. Ini mendukung skrip skema dan data.

Untuk menghasilkan skrip, jalankan:

skrip schemazen.exe --server localhost --database db --scriptDir c: \ somedir

Kemudian untuk membuat ulang database dari skrip, jalankan:

schemazen.exe buat --server localhost --database db --scriptDir c: \ somedir
Seth Reno
sumber
Hai, Saya ingin mendapatkan SQL QUERY dari database lokal saya yang dibuat di studio visual, bagaimana cara melakukannya dengan alat ini? Saya harus menggunakan arah file .sdf atau bagaimana? Terima kasih.
Karlo A. López
Ini adalah file SQL DataBase yang ringkas.
Karlo A. López
1
CRAP KUDUS INI CEPAT DAN LUAR BIASA.
ConstantineK
1
@hobs Saya senang Anda menganggapnya berguna. : D
Seth Reno
1
@SethReno corrupt sys indexes di my db = SMO tidak dapat membuat skrip apa pun, skrip Anda dapat, jadi pada dasarnya menghemat banyak waktu secara manual untuk melakukan omong kosong. BTW, rekayasa balik yang sangat cepat dari segalanya, seperti 1000x lebih cepat dari SSMS dan tampaknya lebih cepat dari SMO dengan sendirinya (paling tidak karena waktu startup).
ConstantineK
4

Saya menulis utilitas untuk tugas ini, SMOscript .

Pembuatan skrip dilakukan oleh pustaka SMO, dan mendukung tipe objek baru di SQL 2005 dan 2008.

devio
sumber
Hmm saya menginstal aplikasi smo Anda di Vista 64-bit saya. Instal berhasil tetapi saya tidak melihat item di direktori program saya atau daftar Semua Program
PositiveGuy
3

Kami akhirnya menggunakan kombinasi pembuatan skrip SSMS untuk mengekstrak skema dan data, dan kemudian menggunakan alat basis data kami sendiri yang memungkinkan penguraian kata kunci dan penggantian berbasis token dalam skrip. Ini juga memastikan skrip hanya diterapkan sekali.

Mengapa?

  • Kita perlu mendukung penginstalan di SQL Server 2000, 2005 dan 2008, dan ada perubahan tipe data antar versi, misalnya 2005+ memiliki nvarchar (maks), sedangkan 2000 hanya mendukung ntext. Jadi skrip kami menggunakan token dan berdasarkan pilihan db diganti dengan jenis yang benar.
  • Eksekusi beberapa skrip memerlukan waktu tunggu setelah eksekusi, misalnya Kami menemukan jika Anda tidak menunggu beberapa detik setelah membuat database baru melalui skrip, SQL Server terkadang gagal (karena tidak punya waktu untuk membuat db file) ketika melanjutkan untuk membuat tabel, dll.
  • Kami ingin mempertahankan sejarah skrip apa yang dieksekusi dan kapan.
  • Kami ingin mengizinkan penginstal MSI Wix kami untuk menentukan string koneksi dan kredensial, dan membutuhkan beberapa cara untuk meneruskan ini ke dalam skrip, jadi sekali lagi, menggunakan token dan beberapa logika bersyarat.

Contoh skrip (diedit agar singkat)

-- Sleep: 5 
-- Sleep after creating database to allow file system to create db files
CREATE DATABASE [$Database$]
GO

EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
GO

USE [$Database$]
GO

IF '1'!='$IntegratedSecurity$'
BEGIN
    CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
    CREATE USER [$User$] FOR LOGIN [$Login$]
    EXEC sp_addrolemember N'db_owner', N'$User$'
END
GO
si618
sumber
1

Saya merekomendasikan untuk melihat pengemas RedGate SQL. Ini tidak gratis, tetapi telah cukup berguna untuk sepadan dengan harganya.

Barry Hurt
sumber
1

Hanya dengan melihat data tabel, untuk menampilkan semua konten data tabel di Management Studio 2012 dan 2014, ini agak tersembunyi tetapi saya menemukan opsi setelah beberapa melihat:

  1. Klik kanan db
  2. Pilih 'Tugas'> 'Hasilkan Skrip ...'
  3. Pada 'Set Scripting Options', klik 'Advanced'
  4. Di bawah 'Umum', setel 'Jenis data ke skrip' ke true (ada di bagian bawah grup 'Umum')
Cameron Maju
sumber
0

Jika Anda perlu melakukannya secara terprogram, Anda dapat menggunakan pustaka SQL DMO (OLE) terhadap SQL Server 2000, tetapi kemungkinan besar Anda mungkin ingin menggunakan pustaka SQL SMO (pustaka .NET asli) terhadap SQL Server 2005 dan yang lebih baru.

Kedua pustaka ini merupakan bagian integral dari penginstalan alat administratif SQL Server.

Ini terjadi jika membuat skrip database lengkap dari SQL Server Management Studio tidak cukup.

poliglot
sumber