【问题标题】:How to get SMO object (e.g Table) from SQl SERVER object_id?如何从 SQl SERVER object_id 获取 SMO 对象(例如表)?
【发布时间】:2014-01-31 09:16:38
【问题描述】:

如何从 sql server object_id 获取 SMO 对象(例如 Table)?

我看到可以通过URN(Server.GetSmoObject 方法)弹出SMO 对象。 但是后来我又遇到了一个问题:如何将object_id转换为URN?

【问题讨论】:

  • 我已经编辑了我的答案。它可能会在其他方面有所帮助。
  • 你想做什么?也就是说,在 SMO 中通过 object_id 选择对象似乎是一件奇怪的事情。你的用例是什么?
  • 我想知道如何通过 id 选择对象,因为 1) 我正在尝试使脚本更紧凑 2) 我正在学习 SMO 并将我的知识映射到它。

标签: sql-server sql-server-2012 smo


【解决方案1】:

我在这里假设您使用的是 C#,并且您的服务器变量已经连接等。

如果您知道要查找的对象(在示例中为表),请尝试此操作。

Server.GetSmoObject(Server.Database["DBName"].Tables.ItemById(object_id).Urn);

希望对你有帮助

编辑

这是另一种方式。它创建一个有 4 列的数据表。 ObjectsType、Schema、Name 和 Urn

DataTable table = server.Databases["DBName"].EnumObjects();
foreach (DataRow item in table.Rows)
{
    if(item[2].ToString() == "Companies" && item[0].ToString() == "Table")
    {
        server.GetSmoObject(item[3].ToString());
    }
}

但是如果你想在 SQL 代码中创建一个 Urn,你可以这样做

Select '"Server[@Name=''' + @@SERVERNAME + ''']/Database[@Name=''' + DB_Name() + '''/Table[@Name=''' + OBJECT_NAME(117575457) + ''']"'

【讨论】:

  • 当然用这个解决方案我应该提前知道object_id代表表(不是视图),但这对我来说已经足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多