2010-05-01 40 views
9

Trong SSMS khi tôi nhấp vào cơ sở dữ liệu "Công việc -> Tạo tập lệnh", tôi nhận được tập lệnh đầu ra.SQL Server 2008 - tạo tập lệnh cơ sở dữ liệu (lược đồ + dữ liệu) với dòng lệnh

Làm cách nào để thực hiện tương tự với công cụ không phải đồ họa?

+2

Tại sao bạn lại thẻ "cơ sở dữ liệu sao lưu"? Việc viết mã DB rất khác với việc sao lưu ... – gbn

Trả lời

7

Công cụ đồ họa chỉ là một trình bao bọc xung quanh các lớp SMO thực sự triển khai kịch bản, như lớp Scripter. Có một ví dụ về kịch bản tất cả các bảng trong một cơ sở dữ liệu với SMO trong MSDN: Scripting:

//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); 
     } 
     } 
    } 
} 

Có rất nhiều ví dụ khác làm thế nào để sử dụng nó trên các trang web khác nhau.

2

Bạn có thể sử dụng PowerShell để thực hiện việc này. Một ví dụ ở đây cho các bảng kịch bản. http://www.simple-talk.com/sql/sql-tools/using-powershell-to-generate-table-creation-scripts/ Tôi đoán rằng có thể mở rộng cho các loại đối tượng cơ sở dữ liệu khác.

Chỉnh sửa Chỉ cần nhận thấy rằng tiêu đề cho biết dữ liệu cũng như lược đồ. Tôi không nhận thức được bất cứ điều gì miễn phí mà thực hiện điều này từ dòng lệnh. Redgate SQL Compare Suite có thể tự động hóa từ dòng lệnh nếu bạn mua phiên bản phù hợp hoặc bạn có thể viết một kịch bản lệnh ứng dụng/trình bao điện để thực hiện nó.

+1

tiện ích đồ họa có thể đổ dữ liệu –

2

Đối với dữ liệu, bạn có thể sử dụng tiện ích xuất số lượng lớn được gọi là bcp cho phép bạn kết xuất dữ liệu từ các bảng SQL Server vào tệp, ví dụ: tệp CSV hoặc tệp được phân cách bằng tab.

Tôi không biết bất kỳ tiện ích được cung cấp bởi SQL Server nào có thể tạo các kịch bản lệnh SQL với các câu lệnh INSERT như SQL Server Management Studio.

1

Bạn có thể mã hóa lược đồ dữ liệu bằng cách sử dụng trình hướng dẫn xuất bản SQL Server. Điều này có thể được thực hiện từ dòng lệnh. Phiên bản 1.4 là một trong những bạn muốn nó đi kèm với Visual Studio như của phiên bản 2008 và cũng với SQL Server 2008. Bạn có thể tìm thấy nó trong Program Files/Microsoft SQL server/90/Tools/Publishing/1.4/SqlPubWiz Tôi tin rằng nó cũng là một dự án trên CodePlex.

Loại SQlPubWiz /? để xem các tùy chọn dòng lệnh

1

Tôi đã viết một tiện ích dòng lệnh nguồn mở có tên là SchemaZen thực hiện việc này. Đó là nhanh hơn nhiều so với kịch bản từ studio quản lý và đầu ra của nó là kiểm soát phiên bản thân thiện hơn. Nó hỗ trợ kịch bản cả lược đồ và dữ liệu.

Để tạo ra các script chạy:

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

Sau đó, để tái tạo lại cơ sở dữ liệu từ các kịch bản chạy:

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

Có sẵn sàng để sử dụng công cụ xuất khẩu schema dòng lệnh mã nguồn mở miễn phí tại http://exportsqlscript.codeplex.com/.

Tiện ích điều khiển dòng lệnh để xuất các đối tượng MS SQL thành tệp tập lệnh phù hợp để tạo và sửa đổi cơ sở dữ liệu. Sử dụng đối tượng quản lý máy chủ 2008R2 (SMO) tương thích với SQL Server 2000, SQL Server 2005, SQL Server 2008 và SQL Server 2008 R2.

Đã phải cài đặt Windows Installer 4.5, .NET Framework 3.5 và Quản lý Shared Objects với hệ thống CLR loại từ SQL Server 2008 R2 Feature Pack để làm cho nó làm việc.

Làm việc xuất khẩu lệnh dụ cho SQL Server 2005:

ExportSQLScript.exe . dldb /ot:Tree /xt:UserDefinedTableTypes 
+0

Ngoài ra còn có một ví dụ khác về TSQL sử dụng SMO tại http://www.nigelrivett.net/DMOScriptAllDatabases.html. – Vadzim

0

bạn có thể tải về các kịch bản PowerShell

https://gallery.technet.microsoft.com/SCRIPTING-DB-DB-OBJECTS-DB-81bba072

các kịch bản PowerShell sẽ kịch bản ra db, các đối tượng db, quyền db, đăng nhập sql, quyền sql, công việc sql, máy chủ được liên kết sql, thư sql, kích hoạt máy chủ sql

$path = "E:\pruthvi\pruthvi\" 

$servername="SRVBLRDBATST98\MSSQLSERVER1" 
[email protected]" 
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 
"@ 


[email protected]" 
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 
"@ 

[email protected]" 
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 
1

Microsoft đã phát hành một công cụ mới vào tuần trước có tên là mssql-scripter. Đó là phiên bản dòng lệnh của thuật sĩ 'Tạo kịch bản' trong SSMS. Công cụ này là một công cụ dòng lệnh mã nguồn mở dựa trên Python và bạn có thể tìm thấy thông báo chính thức here. Về cơ bản, trình scripter cho phép bạn tạo các kịch bản lệnh T-SQL (DDL và DML) cho đối tượng cơ sở dữ liệu/cơ sở dữ liệu của bạn dưới dạng tệp .sql. Dưới đây là một ví dụ sử dụng nhanh chóng để giúp bạn bắt đầu:

$ 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 

Thêm ví dụ sử dụng trên trang GitHub của chúng tôi ở đây: https://github.com/Microsoft/sql-xplat-cli/blob/dev/doc/usage_guide.md

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