Нужен совет по таблицам sql server - PullRequest
2 голосов
/ 31 августа 2011

Кто-нибудь имеет представление о том, как получить имя таблицы и имя столбца с помощью системных таблиц sql server?

Пример: я знаю, что таблица где-то в моей базе данных имеет поле, содержащее ID = 1125412.

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

Это выполнимо, если вы знаете имя столбца и хотите знать имя таблицы, к которой он принадлежит?

Ответы [ 2 ]

7 голосов
/ 31 августа 2011

Это супер противно, но оно будет работать:

-- Finding all tables with an ID column
SELECT SCHEMA_NAME(T.schema_id) SchemaName,
       T.name TableName
INTO #FoundTables
FROM sys.tables T INNER JOIN
     sys.columns C ON T.object_id = C.object_id
WHERE C.name = 'ID';

DECLARE @SchemaName NVarChar(100),
        @TableName NVarChar(100),
        @SQL NVarChar(2000);
-- Dynamically build a SELECT statement
WHILE (EXISTS (SELECT * FROM #FoundTables)) BEGIN
  SELECT TOP 1 @SchemaName = SchemaName, @TableName = TableName,
    @SQL = 'SELECT * FROM $SchemaName.$TableName WHERE ID = 1125412;'
  FROM #FoundTables;

  SELECT @SQL =
    REPLACE(REPLACE(@SQL, '$SchemaName', @SchemaName), '$TableName', @TableName);
  EXEC (@SQL);

  DELETE FROM #FoundTables
  WHERE SchemaName = @SchemaName
    AND TableName = @TableName;
END;

DROP TABLE #FoundTables;
0 голосов
/ 31 августа 2011

Я использую следующий запрос:

SELECT  sys.sysobjects.id, 
    sys.sysobjects.name AS TableName, 
    sys.syscolumns.colid, 
    sys.syscolumns.name AS ColumnName, 
    sys.systypes.name AS DataType, 
    sys.syscolumns.isnullable AS AllowNull
FROM sys.syscolumns LEFT OUTER JOIN
    sys.systypes ON sys.syscolumns.xtype = sys.systypes.xtype 
    RIGHT OUTER JOIN sys.sysobjects ON sys.syscolumns.id = sys.sysobjects.id
WHERE (sys.sysobjects.xtype = 'U') AND (sys.systypes.name <> 'sysname')
ORDER BY TableName, sys.syscolumns.colid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...