【问题标题】:How to change table name when script a table from SQL Server SMO从 SQL Server SMO 编写表时如何更改表名
【发布时间】:2009-01-16 18:45:44
【问题描述】:

假设我有一个表“foo”,我想使用 SMO 编写脚本。有没有办法让生成的脚本中的表具有不同的名称,例如“foo2”?

Database db = sqlServer.Databases["testdb"];
Table foo = db.Tables["foo"];
foo.Name = "foo2";

如果我这样做,当我尝试设置 foo.Name 时会出现此异常:

“无法对该对象执行操作,因为该对象是集合的成员。”

有没有办法用 SMO 做到这一点?

【问题讨论】:

    标签: sql-server smo


    【解决方案1】:

    对于像我这样试图了解如何使用 SMO 重命名列的人,如果您使用与上述相同的方法

    foo.Name = "foo2";
    

    您将在此线程中收到相同的异常消息。要重命名该列,您只需要去

    foo.Rename("foo2");
    

    更多详情请见MSDN

    【讨论】:

      【解决方案2】:

      您必须将 Script 方法的输出放入字符串变量并使用 Replace 替换名称。

      【讨论】:

      • 似乎有风险,因为表名可能是其他对象(列等)的子字符串
      • 是的,但可以通过 FIND "CREATE TABLE foo" REPLACE "CREATE TABLE foo2" 避免进入列。但是您可能必须进行多次替换才能进入约束和索引。不确定这些是否单独编写脚本。自从我玩 SMO 以来已经有一段时间了。
      • 表名将在脚本中第一个“CREATE TABLE”之后。
      【解决方案3】:

      您可以使用新名称在内存中创建一个新表,然后编写该表的脚本。

      您可以在Copying a table using SMO找到复制表格的代码

      您只需调用 Script(),而不是在新表上调用 Create()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 2011-06-26
        • 2019-05-11
        • 2021-12-29
        • 2017-12-13
        • 1970-01-01
        相关资源
        最近更新 更多