Получение информации о таблице
Я пытаюсь получить информацию о таблице, дать имя таблицы, поэтому я написал запрос следующим образом:
SELECT so.name, sc.name, st.name, sc.length, CASE WHEN sc.status = 0x80 THEN 'Y' ELSE 'N' END AS IsIdent, ColOrder
FROM Asdim.dbo.sysobjects so
INNER JOIN Asdim.dbo.syscolumns sc
ON so.id= sc.id
INNER JOIN Asdim.dbo.systypes st
ON sc.xtype = st.xusertype
WHERE so.Name = 'Admin'
Проблема в том, что у меня есть две таблицы с именем "Admin", но они имеют разные схемы. Поэтому, когда я запускаю этот запрос:
SELECT * FROM Asdim.dbo.sysobjects WHERE name LIKE 'Admin'
Я получаю две записи, так как имена таблиц совпадают. Есть ли способ, который я мог бы отфильтровать на основе имени схемы тоже?
1 ответ
Решение
Все используемые вами представления устарели и просто предоставлены для обратной совместимости. Использование новых видов дает.
SELECT t.name,
c.name,
ty.name,
c.is_identity,
c.max_length,
c.column_id
FROM sys.tables t
JOIN sys.schemas s ON s.schema_id=t.schema_id
JOIN sys.columns c ON c.object_id = t.object_id
JOIN sys.types ty ON ty.user_type_id = c.user_type_id
WHERE t.name LIKE '%Admin%' AND s.name = 'dbo'
INFORMATION_SCHEMA.COLUMNS
содержит почти всю необходимую информацию, но отсутствует информация о столбцах идентификаторов.