【问题标题】:How to generate script to drop column using SMO with SQL Server?如何使用 SMO 和 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()方法。

任何帮助将不胜感激

【问题讨论】:

    标签: c# .net sql-server smo


    【解决方案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
    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多