如何使用 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 生成脚本以删除列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用 SMO 列出可用的 SQL Server 实例?

如何使用 SMO 脚本生成 sql 脚本

SQL Server:为啥要使用 SMO?

使用 SMO 重启 SQL Server 实例

sql 使用SMO重新启动Sql Server代理服务

[转]SQL Server编程:SMO介绍