DBATOOLS - 从表中复制数据并在目标数据库上创建



DbaTools Related - https://dbatools.io/functions/

你好 我正在尝试找到一种解决方案来复制表并在-Destination / -DestinationDatabase上创建它,请。

我正在使用:

Get-DbaTable -SqlInstance "Machine1" -Database DBA -Table "Table01" | Copy-DbaTableData -Destination "Machine2PANDA" -DestinationDatabase PANDA01 -DestinationTable "Table01"

但是由于表未在目标上创建,因此我收到错误消息:

警告: [

15:25:58][复制-dba表数据] 表 01 在 上不存在 目的地

请问有什么方法可以在目标数据库上复制和创建表吗?

这是我用于类似任务的东西 -

# Configuration for scripting options: Which related objects should also be scripted? 
$so = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions; 
$so.DriAllConstraints = $true; 
$so.DriAllKeys = $true;
$so.DriClustered = $true; 
$so.DriDefaults = $true; 
$so.DriIndexes = $true; 
$so.DriNonClustered = $true; 
$so.DriPrimaryKey = $true; 
$so.DriUniqueKeys = $true; 
$so.AnsiFile = $true; 
$so.ClusteredIndexes  = $true; 
$so.IncludeHeaders = $true; 
$so.Indexes = $true; 
$so.SchemaQualify = $true; 
$so.Triggers = $true; 
$so.XmlIndexes = $true; 
#Hard-Coding the Server and database info
$SourceServer = "SourceServer"
$SourceDatabase = "SourceDatabase"
$TargetServer = "TargetServer"
$TargetDatabase = "TargetDatabase"

#Creating folders for storing Create_Database text files if they don't exist
If(!(Test-Path E:ScriptDatabases)) 
{
New-Item -ItemType Directory -Force -Path E:ScriptDatabases
}
#Creating the database connection object for Source server
$Srcsrv = new-Object Microsoft.SqlServer.Management.Smo.Server($Sourceserver);
$Srcdb = New-Object Microsoft.SqlServer.Management.Smo.Database;
$Srcdb = $Srcsrv.Databases.Item($SourceDatabase);
#Creating the database connection object for Destination server
$Destsrv = new-Object Microsoft.SqlServer.Management.Smo.Server($TargetServer);
$Destdb = New-Object Microsoft.SqlServer.Management.Smo.Database;
$Destdb = $Destsrv.Databases.Item($TargetDatabase);
foreach ($table in $Srcdb.Tables)
{
$table.Script($so) | Out-File -FilePath E:ScriptDatabases$($table.Name).txt
$CreatedbQuery = Get-Content E:ScriptDatabases$($table.Name).txt | Out-String
Invoke-sqlcmd -Query $CreatedbQuery -Database $TargetDatabase -server $TargetServer
}

上面将脚本将所有表从源数据库写成文本文件,然后从文本文件中读取相同的表,并在目标数据库和目标服务器上创建表。要记住的几件事 -

  1. 该脚本要求数据库存在于目标服务器中。否则,脚本将失败。因此,在执行此操作之前创建目标数据库。
  2. 如果数据库中除dbo之外还有其他架构,则需要先创建这些架构。否则,将不会创建其他架构的表。
  3. 有关脚本选项的列表,可以参考此 msdn 链接,您可以在其中根据需要将脚本选项设置为数据库对象的$true$false

您可以在创建表后运行此Get-DbaTable -SqlInstance "Machine1" -Database DBA -Table "Table01" | Copy-DbaTableData -Destination "Machine2PANDA" -DestinationDatabase PANDA01 -DestinationTable "Table01",也可以在创建表本身之后循环脚本,以便同时创建表和将数据加载到表中。这完全是你的选择,我由你自行决定。希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新