如何使用 SMO 和 SQL Server 生成脚本以删除列?
Posted
技术标签:
【中文标题】如何使用 SMO 和 SQL Server 生成脚本以删除列?【英文标题】:How to generate script to drop column using SMO with SQL Server? 【发布时间】:2021-11-04 23:06:16 【问题描述】:我想使用 SMO 生成脚本来删除表格的某些列。
在 os Indexes 的情况下,我可以使用
生成放置脚本ScriptingOptions drop = new ScriptingOptions
ScriptDrops = true,
IncludeIfNotExists = true
;
Index sourceIndex = sourceTable.Indexes[originalName];
var script = sourceIndex.Script(drop);
如何生成删除列的脚本? SMO的对象列没有Script()方法。
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:我打算使用powershell作为演示,但我认为它应该可以立即转移。
$alter_opts = New-DbaScriptingOption;
$alter_opts.ScriptForAlter = $true;
$db = Get-DbaDatabase -SqlInstance . -Database myDB;
$tbl = $db.Tables['myTable'];
$tbl.Columns['ColumnToBeDropped'].MarkForDrop($true);
$tbl.Script($alter_opts);
MarkForDrop($true)
调用中的魔力(如果有的话)。这告诉 SMO 下次在表上调用 Alter()
时删除该列。
【讨论】:
感谢您的帮助!它正确生成脚本! :) 我可以假设这样我也可以更改列类型。 它似乎适用于我有限的测试。尽管这样做更简单,因为您可以执行$col.DataType = «NewDT»
之类的操作,然后调用$tbl.Script($opts)
。
你知道是否可以只创建一个单列脚本吗?我的意思是从一个多列的表中只生成:ALTER TABLE [Table_Test] ADD [Column_Test] [int] NULL GO以上是关于如何使用 SMO 和 SQL Server 生成脚本以删除列?的主要内容,如果未能解决你的问题,请参考以下文章