【问题标题】:SMO generate database script using PowerShell, so it was same way as when creating script manually from Management StudioSMO 使用 PowerShell 生成数据库脚本,因此它与从 Management Studio 手动创建脚本时的方式相同
【发布时间】:2019-07-16 05:58:55
【问题描述】:

我需要使用 SMO 在代码中生成脚本,因此它与我使用 Management Studio 手动创建它完全一样。 IE。数据库 -> 任务 -> 生成脚本.. -> 选择架构和数据。

因此,我想要类似的东西:

USE [master]
GO

CREATE DATABASE [MyDatabase]
CONTAINMENT = NONE
ON PRIMARY 
( NAME = N'MyDatabase', FILENAME = N'C:\Databases\Data\MyDatabase.mdf' , SIZE = 100KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON 
( NAME = N'MyDatabase_log', FILENAME = N'C:\Databases\Data\MyDatabase_log.ldf' , SIZE = 100KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
BEGIN
    EXEC [MyDatabase].[dbo].[sp_fulltext_database] @action = 'enable'
END
GO

ALTER DATABASE [MyDatabase] SET ANSI_NULL_DEFAULT OFF 
...
GO

/****** Object:  DatabaseRole [StoreRW]    Script Date: 22.02.2019 10:14:14 ******/
CREATE ROLE [StoreRW]
GO

...
GO

CREATE TABLE [dbo].[MyTabale1](
...

即结果应包含CREATE DATABASE 语句。

但目前我在这方面没有成功。我有数据库架构和数据,但没有CREATE DATABASE

我正在使用此代码:

$My="$ms.Management.Smo" #
$s = new-object ("$My.Server") $DataSource

if ($s.Version -eq $null) { Throw "Can't find the instance $Datasource" }

$ver = $s.Version
echo " SQL Server version is $ver"
$db= $s.Databases[$Database]

if ($db.name -ne $Database) { Throw "Can't find the database '$Database' in $Datasource" };

$transfer = new-object ("$My.Transfer") $db

if ($transfer -eq $null) { Throw "Can't create transfer object" }

$transfer.Options.Default = $true;
$transfer.Options.ScriptBatchTerminator = $true # this only goes to the file
$transfer.Options.ToFileOnly = $true # this only goes to the file

$transfer.Options.ExtendedProperties = $true;
$transfer.Options.IncludeDatabaseContext = $true;
$transfer.Options.WithDependencies = $true;
$transfer.Options.IncludeHeaders = $true;
$transfer.Options.SchemaQualify = $true;
$transfer.Options.DriAll = $true;

$transfer.Options.ScriptData = $true;
$transfer.Options.ScriptSchema = $true;
$transfer.Options.FileName = $BackupFile;
$tmp = $transfer.Options;
echo " Transfer options are: $tmp";
$transfer.EnumScriptTransfer();
echo "Scripting database '$dbName' to '$BackupFile' done"

我需要添加什么才能在其中获得CREATE DATABASE

【问题讨论】:

    标签: sql-server powershell smo


    【解决方案1】:

    一旦分配了$db,就需要添加此行:

    $db.script()
    

    如果您希望将该脚本数据输出到文件,则只需添加以下内容:

    $db.script() | out-file "c:\folder\create-db.sql"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 2021-04-18
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      相关资源
      最近更新 更多