SQL 2005 SMO - находит таблицу ссылки

Вы можете сделать все это напрямую с помощью OSMnx:

import osmnx as ox
from shapely.geometry import Point
station_point = (-71.083364, 42.341586)
projected_point, projection_crs = ox.project_geometry(Point(station_point))
projected_buffer = projected_point.buffer(400)
buffer, latlong_crs = ox.project_geometry(projected_buffer, crs=projection_crs, to_latlong=True)
G = ox.graph_from_polygon(buffer)

Определить точку станции, спроецировать ее на метры (UTM), буферизовать ее радиусом 400 м, спроецировать буфер обратно на широту, затем подключите уличную сеть.

5
задан Cosmin Onea 19 April 2009 в 17:44
поделиться

5 ответов

Хорошо, я думаю, что нашел его.

table.Columns[0].EnumForeignKeys()

или непосредственно

table.EnumForeignKeys ()

I ожидал свойства вместо функции. Я уверен, что за кулисами он делает то, что предложил cmsjr.

6
ответ дан 18 December 2019 в 09:53
поделиться

Используя SMO, вы можете сделать это:

using Microsoft.SqlServer.Management.Smo;

Server localServer = new Server("your server name");
Database dasecoDB = localServer.Databases["your database name"];

Table table = dasecoDB.Tables["your table name"];
foreach(ForeignKey fk in table.ForeignKeys)
{
  Console.WriteLine("Foreign key {0} references table {1} and key {2}", fk.Name, fk.ReferencedTable, fk.ReferencedKey);
}

Marc

4
ответ дан 18 December 2019 в 09:53
поделиться

Этот запрос должен работать и может быть выполнен с использованием базы данных. ExecuteWithResults

Select fk.Table_Name from 
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
    INNER JOIN 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK 
      ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
    INNER JOIN 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK 
        ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
where PK.Table_Name = 'SomeTable'

например

SqlConnection sqlConnection =
new SqlConnection(@"Integrated Security=SSPI; Data Source=SomeInstance");
Server server = new Server(serverConnection);
Database db = server.Databases["somedatabase"];
DataSet ds = db.ExecuteWithResults(thesqlabove);
3
ответ дан 18 December 2019 в 09:53
поделиться

Вы можете использовать представления INFORMATION_SCHEMA .

даст INFORMATION_SCHEMA.TABLE_CONSTRAINTS имена первичных ключей в этой таблице.

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = @TableName

С учетом имен первичных ключей вы можете получить референциальные ограничения, использующие эти ключи, из INFORMRE_FINTS.SCHE.

И затем имена таблиц путем запроса INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE

Не SMO как таковой, но, учитывая вышеизложенное, вы сможете составить запрос, который выведет список ограничений, которые необходимо отключить.

2
ответ дан 18 December 2019 в 09:53
поделиться

У меня это не работает.

] Рассмотрим следующие отношения:

Таблица1 -> главная таблица; Table2 -> slave table;

Table2.Table1_ID - это внешний ключ Table1.ID

Table1.EnumForeignKeys () return null.

Вместо этого я успешно попробовал объект DependencyWalker. В следующем коде перечислены все таблицы, которые выходят из заданного набора таблиц.

            DependencyWalker w = new DependencyWalker(db.Parent);
            DependencyTree tree = w.DiscoverDependencies(urns,false);
            DependencyCollection depends = w.WalkDependencies(tree);

            foreach (DependencyCollectionNode dcn in depends)
            {
                if (dcn.Urn.Type == "Table")
                {
                    dcn.Urn.GetNameForType("Table");
                    Console.WriteLine(dcn.Urn.GetNameForType("Table"));
                }
            }

где «urns» - это набор table.Urn.

1
ответ дан 18 December 2019 в 09:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: