SSMSで、データベースの[タスク]-> [スクリプトの生成]をクリックすると、出力スクリプトが表示されます。
非グラフィカルツールで同じことを行うにはどうすればよいですか?
SSMSで、データベースの[タスク]-> [スクリプトの生成]をクリックすると、出力スクリプトが表示されます。
非グラフィカルツールで同じことを行うにはどうすればよいですか?
グラフィカルツールは、 Scripterクラスのように、実際にスクリプトを実装するSMOクラスの単なるラッパーです。MSDNには、SMOを使用してデータベース内のすべてのテーブルをスクリプト化する例があります。スクリプト作成:
//Connect to the local, default instance of SQL Server.
{
Server srv = default(Server);
srv = new Server();
//Reference the AdventureWorks database.
Database db = default(Database);
db = srv.Databases("AdventureWorks");
//Define a Scripter object and set the required scripting options.
Scripter scrp = default(Scripter);
scrp = new Scripter(srv);
scrp.Options.ScriptDrops = false;
scrp.Options.WithDependencies = true;
//Iterate through the tables in database and script each one. Display the script.
//Note that the StringCollection type needs the System.Collections.Specialized namespace to be included.
Table tb = default(Table);
Urn[] smoObjects = new Urn[2];
foreach ( tb in db.Tables) {
smoObjects = new Urn[1];
smoObjects(0) = tb.Urn;
if (tb.IsSystemObject == false) {
StringCollection sc = default(StringCollection);
sc = scrp.Script(smoObjects);
string st = null;
foreach ( st in sc) {
Console.WriteLine(st);
}
}
}
}
他のさまざまなサイトでそれを使用する方法の例は他にもたくさんあります。
これを行うには、PowerShellを使用できます。ここでのスクリプトテーブルの例。http://www.simple-talk.com/sql/sql-tools/using-powershell-to-generate-table-creation-scripts/他の種類のデータベースオブジェクトに拡張できるはずだと思います。
編集タイトルがスキーマだけでなくデータも示していることに気づきました。コマンドラインからこれを行う無料のものは何も知りません。Redgate SQL Compare Suiteは、適切なバージョンを購入するか、それを実行するためのアプリケーション/ PowerShellスクリプトを記述できる場合、コマンドラインから自動化できます。
bcp
データには、SQL ServerテーブルからCSVファイルやタブ区切りファイルなどのファイルにデータをダンプできる、と呼ばれる一括エクスポートユーティリティを使用できます。
SQL Server Management Studioのように、INSERTステートメントを使用してSQLスクリプトを作成するSQLServerが提供するユーティリティを知りません。
SQLServer公開ウィザードを使用してスキーマとデータをスクリプト化できます。これは、コマンドラインから実行できます。バージョン1.4は、バージョン2008以降のVisualStudioおよびSQLServer2008にバンドルする必要があるバージョンです。ProgramFiles/Microsoft SQL server / 90 / Tools / Publishing / 1.4/SqlPubWizにあります。これもプロジェクトであると思います。 CodePlexで。
SQlPubWiz /?と入力します。コマンドラインオプションを表示するには
これを行うSchemaZenという名前のオープンソースコマンドラインユーティリティを作成しました。Management Studioからのスクリプトよりもはるかに高速で、出力はバージョン管理に適しています。スキーマとデータの両方のスクリプトをサポートします。
スクリプトを生成するには、次のコマンドを実行します。
schemazen.exeスクリプト--serverlocalhost--database db --scriptDir c:\ somedir
次に、スクリプトからデータベースを再作成するには、次のコマンドを実行します。
schemazen.exe create --server localhost --database db --scriptDir c:\ somedir
Microsoftは先週、mssql-scripterと呼ばれる新しいツールをリリースしました。これは、SSMSの「スクリプトの生成」ウィザードのコマンドラインバージョンです。このツールはPythonベースのオープンソースコマンドラインツールであり、公式発表はここにあります。基本的に、スクリプターを使用すると、データベース/データベースオブジェクトのT-SQLスクリプト(DDLおよびDML)を.sqlファイルとして生成できます。開始するための簡単な使用例を次に示します。
$ pip install mssql-scripter
# script the database schema and data piped to a file.
$ mssql-scripter -S localhost -d AdventureWorks -U sa --schema-and-data > ./adventureworks.sql
その他の使用例は、GitHubページにあります: https ://github.com/Microsoft/sql-xplat-cli/blob/dev/doc/usage_guide.md
http://exportsqlscript.codeplex.com/に、無料のオープンソースコマンドラインスキーマエクスポートツールを使用する準備ができています。
データベースの作成とリビジョン管理に適したスクリプトファイルにMSSQLオブジェクトをエクスポートするコマンドライン駆動型ユーティリティ。SQL Server 2000、SQL Server 2005、SQL Server 2008、およびSQL Server 2008 R2と互換性のある2008R2サーバー管理オブジェクト(SMO)を使用します。
それを機能させるには、 Windowsインストーラー4.5、.NET Framework 3.5 、およびSQL Server 2008 R2FeaturePackからシステムCLRタイプの共有管理オブジェクトをインストールする必要がありました。
SQL Server 2005のエクスポートコマンドの例:
ExportSQLScript.exe . dldb /ot:Tree /xt:UserDefinedTableTypes
PowerShellスクリプトをダウンロードできます
https://gallery.technet.microsoft.com/SCRIPTING-DB-DB-OBJECTS-DB-81bba072
PowerShellスクリプトは、db、dbオブジェクト、db権限、sqlログイン、sql権限、sqlジョブ、sqlリンクサーバー、sqlメール、sqlサーバートリガーをスクリプト化します。
$path = "E:\pruthvi\pruthvi\"
$servername="SRVBLRDBATST98\MSSQLSERVER1"
$query=@"
set nocount off
IF OBJECT_ID(N'tempdb..##temp1') IS NOT NULL
DROP TABLE ##temp1
create table ##temp1(query varchar(1000))
insert into ##temp1
select 'use '+db_name() +';'
insert into ##temp1
select 'go'
/*creating database roles*/
insert into ##temp1
select 'if DATABASE_PRINCIPAL_ID('''+name+''') is null exec sp_addrole '''+name+''';' from sysusers
where issqlrole = 1 and (sid is not null and sid <> 0x0)
/*creating application roles*/
insert into ##temp1
select 'if DATABASE_PRINCIPAL_ID('+char(39)+name+char(39)+')
is null CREATE APPLICATION ROLE ['+name+'] WITH DEFAULT_SCHEMA = ['+
default_schema_name+'], Password='+char(39)+'Pass$w0rd123'+char(39)+' ;'
from sys.database_principals
where type_desc='APPLICATION_ROLE'
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' to '+'['+USER_NAME(grantee_principal_id)+']'+' WITH
GRANT OPTION ;'
else
state_desc+' '+permission_name+' to '+'['+USER_NAME(grantee_principal_id)+']'+' ;'
END
from sys.database_permissions
where class=0 and USER_NAME(grantee_principal_id) not in ('dbo','guest','sys','information_schema')
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' on '+OBJECT_SCHEMA_NAME(major_id)+'.'+OBJECT_NAME
(major_id)
+' to '+'['+USER_NAME(grantee_principal_id)+']'+' with grant option ;'
else
state_desc+' '+permission_name+' on '+OBJECT_SCHEMA_NAME(major_id)+'.'+OBJECT_NAME(major_id)
+' to '+'['+USER_NAME(grantee_principal_id)+']'+' ;'
end
from sys.database_permissions where class=1 and USER_NAME(grantee_principal_id) not in ('public');
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON schema::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON schema::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.schemas sa on
sa.schema_id = dp.major_id where dp.class=3
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON APPLICATION ROLE::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON APPLICATION ROLE::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.database_principals sa on
sa.principal_id = dp.major_id where dp.class=4 and sa.type='A'
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON ROLE::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON ROLE::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join
sys.database_principals sa on sa.principal_id = dp.major_id
where dp.class=4 and sa.type='R'
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON ASSEMBLY::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON ASSEMBLY::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.assemblies sa on
sa.assembly_id = dp.major_id
where dp.class=5
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON type::['
+SCHEMA_NAME(schema_id)+'].['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON type::['
+SCHEMA_NAME(schema_id)+'].['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.types sa on
sa.user_type_id = dp.major_id
where dp.class=6
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON XML SCHEMA COLLECTION::['+
SCHEMA_NAME(SCHEMA_ID)+'].['+sa.name+'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON XML SCHEMA COLLECTION::['+
SCHEMA_NAME(SCHEMA_ID)+'].['+sa.name+'] to ['+user_name(dp.grantee_principal_id)+'];'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.xml_schema_collections sa on
sa.xml_collection_id = dp.major_id
where dp.class=10
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON message type::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON message type::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.service_message_types sa on
sa.message_type_id = dp.major_id
where dp.class=15
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON contract::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON contract::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.service_contracts sa on
sa.service_contract_id = dp.major_id
where dp.class=16
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON SERVICE::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON SERVICE::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.services sa on
sa.service_id = dp.major_id
where dp.class=17
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON REMOTE SERVICE BINDING::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON REMOTE SERVICE BINDING::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.remote_service_bindings sa on
sa.remote_service_binding_id = dp.major_id
where dp.class=18
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON route::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON route::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.routes sa on
sa.route_id = dp.major_id
where dp.class=19
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON FULLTEXT CATALOG::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON FULLTEXT CATALOG::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.fulltext_catalogs sa on
sa.fulltext_catalog_id = dp.major_id
where dp.class=23
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON SYMMETRIC KEY::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON SYMMETRIC KEY::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.symmetric_keys sa on
sa.symmetric_key_id = dp.major_id
where dp.class=24
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON certificate::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON certificate::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.certificates sa on
sa.certificate_id = dp.major_id
where dp.class=25
insert into ##temp1
select
case
when state_desc='GRANT_WITH_GRANT_OPTION'
then
substring (state_desc,0,6)+' '+permission_name+' ON ASYMMETRIC KEY::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
else
state_desc+' '+permission_name+' ON ASYMMETRIC KEY::['+sa.name+
'] to ['+user_name(dp.grantee_principal_id)+'] ;'
COLLATE LATIN1_General_CI_AS
end
from sys.database_permissions dp inner join sys.asymmetric_keys sa on
sa.asymmetric_key_id = dp.major_id
where dp.class=26
insert into ##temp1
select 'exec sp_addrolemember ''' +p.NAME+''','+'['+m.NAME+']'+' ;'
FROM sys.database_role_members rm
JOIN sys.database_principals p
ON rm.role_principal_id = p.principal_id
JOIN sys.database_principals m
ON rm.member_principal_id = m.principal_id
where m.name not like 'dbo';
select * from ##temp1
"@
$loginscript=@"
IF ((SELECT convert(int,substring(@@VERSION,21,5)))<2008)
begin
set nocount on
declare @table table (query varchar(max))
insert into @table
select 'CREATE LOGIN '+QUOTENAME(name)+' FROM WINDOWS WITH DEFAULT_DATABASE='+QUOTENAME(default_database_name)+' ;'
from sys.server_principals where type in('U','G')
insert into @table
select 'CREATE LOGIN ' + QUOTENAME(name)+
' WITH PASSWORD =' +CONVERT(varchar(max), LOGINPROPERTY(name, 'PasswordHash'),1 )+' HASHED ,SID='+'0x' + CAST('' as XML).value('xs:hexBinary(sql:column("sid"))', 'varchar(MAX)')+', default_database=['+default_database_name+'],'+
case when is_policy_checked=0 then 'CHECK_POLICY = OFF' when is_policy_checked=1 then 'CHECK_POLICY = ON ' end+
case when is_expiration_checked=0 then ' , CHECK_EXPIRATION = OFF ' when is_policy_checked=1 then ', CHECK_EXPIRATION = ON' end+
'; '+case when is_disabled=1 then 'ALTER LOGIN ['+name+ '] DISABLE;' when is_disabled=0 then ' ' end
from sys.sql_logins where name not like '%##%' and name not like '%sa%'
select * from @table
end
else
begin
set nocount on
declare @table1 table (query varchar(max))
insert into @table1
select 'CREATE LOGIN '+QUOTENAME(name)+' FROM WINDOWS WITH DEFAULT_DATABASE='+QUOTENAME(default_database_name)+' ;'
from sys.server_principals where type in('U','G')
insert into @table1
select 'CREATE LOGIN ' + QUOTENAME(name)+
' WITH PASSWORD =' +CONVERT(varchar(max), LOGINPROPERTY(name, 'PasswordHash'),1 )+' HASHED ,SID='+CONVERT(varchar(max), sid, 1)+', default_database=['+default_database_name+'],'+
case when is_policy_checked=0 then 'CHECK_POLICY = OFF' when is_policy_checked=1 then 'CHECK_POLICY = ON ' end+
case when is_expiration_checked=0 then ' , CHECK_EXPIRATION = OFF ' when is_policy_checked=1 then ', CHECK_EXPIRATION = ON' end+
'; '+case when is_disabled=1 then 'ALTER LOGIN ['+name+ '] DISABLE;' when is_disabled=0 then ' ' end
from sys.sql_logins where name not like '%##%' and name not like '%sa%'
select * from @table1
end
"@
$serverperm=@"
set nocount on
IF OBJECT_ID(N'tempdb..##servrole') IS NOT NULL
DROP TABLE ##servrole
CREATE TABLE ##servrole (query varchar(1000))
insert into ##servrole
select 'use master;'
insert into ##servrole
select ' exec sp_addsrvrolemember '''+m.name+''','+p.name+';' FROM sys.server_role_members rm
JOIN sys.server_principals p
ON rm.role_principal_id = p.principal_id
JOIN sys.server_principals m
ON rm.member_principal_id = m.principal_id
where m.name not in ('sa','dbo','entity owner','information_schema','sys','public');
insert into ##servrole
select
case when sp.state_desc='GRANT_WITH_GRANT_OPTION' then
substring (state_desc,0,6)+' '+permission_name+' to ['+srp.name+'] with grant option ;'
else
state_desc+' '+permission_name+' to ['+srp.name+'] ;'
end
from sys.server_permissions sp
join sys.server_principals srp on sp.grantee_principal_id=srp.principal_id
where srp.name not like '%##%' and
srp.name not in ('sa','dbo','entity owner','information_schema','sys')
and sp.type not in ('COSQ','CO');
select query as ' ' from ##servrole where query is not null;
go
drop table ##servrole
go
"@
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')
$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') $servername
$dbs=$s.Databases
foreach ($db in $dbs)
{
$dbname = "$db".replace("[","").replace("]","")
$dbpath = "$path"
$db.script()| out-file $path$dbname.txt
foreach ($tables in $db.tables)
{
$tables.script() |out-file $path$dbname.txt -append
foreach ($index in $tables.Indexes)
{
$index.script() |out-file $path$dbname.txt -append
}
}
bcp "use $db ;select definition from sys.sql_modules " queryout $path$dbname"1".txt -c -t -T -S $servername
gc $path$dbname.txt,$path$dbname"1".txt | out-file $path$dbname"2".txt
$myTable=Invoke-Sqlcmd -Query $query -ServerInstance $servername -database $dbname
$myTable|Format-Table -AutoSize|Out-String -Width 8192 |out-file $path$dbname"2".txt -append
rm $path$dbname.txt,$path$dbname"1".txt
}
$srv=new-object "Microsoft.SqlServer.management.smo.server" $servername
$srv.JobServer.Jobs|%{$_.script()}|out-file $path"agentjobs".txt
$srv.LinkedServers|%{$_.script()}|out-file $path"linkedservers".txt
$srv.backupdevices|%{$_.script()}|out-file $path"backupdevices".txt
$srv.mail|%{$_.script()}|out-file $path"mail".txt
$srv.triggers|%{$_.script()}|out-file $path"servertriggers".txt
$myTable=Invoke-Sqlcmd -Query $loginscript -ServerInstance $servername -database master
$myTable|Format-Table -AutoSize|Out-String -Width 8192 |out-file $path"serverlogins".txt -append
$servperm=Invoke-Sqlcmd -Query $serverperm -ServerInstance $servername -database master
$servperm|Format-Table -AutoSize|Out-String -Width 8192 |out-file $path"serverpermission".txt -append