Создание таблиц с чем-то похожим на INFORMATION_SCHEMA.VIEW_DEFINITION в SQL Server - PullRequest
0 голосов
/ 29 октября 2009

Существует ли стандартный метод для получения определения таблицы CREATE TABLE .. в SQL Server?

Я могу попросить у INFORMATION_SCHEMA определения представлений и функций / процедур, поэтому я подумал, что было бы естественно получить то же самое для таблиц, но я ничего не нашел.

Ответы [ 3 ]

3 голосов
/ 29 октября 2009

Да - INFORMATION_SCHEMA.TABLES должно быть то, что вы ищете.

Это даст вам что-то вроде:

aspnetdb    dbo    aspnet_Paths                      BASE TABLE
aspnetdb    dbo    aspnet_PersonalizationAllUsers    BASE TABLE
aspnetdb    dbo    aspnet_PersonalizationPerUser     BASE TABLE
aspnetdb    dbo    vw_aspnet_WebPartState_Paths      VIEW
aspnetdb    dbo    vw_aspnet_WebPartState_Shared     VIEW
aspnetdb    dbo    vw_aspnet_WebPartState_User       VIEW
aspnetdb    dbo    aspnet_Applications               BASE TABLE

Если вы хотите узнать о столбцах таблицы, посмотрите на INFORMATION_SCHEMA.COLUMNS.

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'aspnet_Users'

предоставит вам все данные для столбцов указанной таблицы.

1 голос
/ 29 октября 2009

Использование INFORMATION_SCHEMA для представлений и кода приведет к ошибке . Данные ограничены nvarchar (4000), поэтому более длинные данные не будут читаться. Используйте sys.sql_modules или OBJECT_DEFINITION .

Для таблиц это сложнее. «Таблица» состоит из столбцов, ограничений, индексов, возможно, правил, UDT (я что-нибудь забыл?). Вот почему в SSMS так много опций сценариев таблиц по сравнению с представлениями или хранимыми процедурами.

Я бы предложил профилировать SSMS и надеюсь, что он не использует SMO ... или использует SMO через код CLR или даже xp_cmdshell.

0 голосов
/ 29 октября 2009

Вы можете использовать SMO (Microsoft.SqlServer.Smo) из .NET для сценария таблицы.

...