Я знаю, что могу получить доступ к свойствам столбца через:
select *
from sysobjects
Однако я не могу найти информацию о том, где получить тип и длину типа для столбец, например: в
FOO VARCHAR(80)
Где я могу найти часть "VARCHAR (80)" объявления типа в таблицах метаданных?
Я попытался посмотреть таблицу systypes, но ее значения для xtype не совпадают со значениями xtype в таблице sysobjects.
* У меня нет доступа к исходному SQL, который использовался для построения этих таблиц, и у меня нет прав администратора.
Если вы знакомы с DB2, я ищу эквивалент
select name,
coltype,
length,
from sysibm.syscolumns
where tbname = 'FOO'
Для построения на ответах выше часто полезно получить тип данных столбца в том же формате, что необходимо объявить столбцы.
, Например, varchar(50)
, varchar(max)
, decimal(p, s)
.
Это позволяет Вам делать это:
SELECT
[Name] = c.[name]
, [Type] =
CASE
WHEN tp.[name] IN ('varchar', 'char') THEN tp.[name] + '(' + IIF(c.max_length = -1, 'max', CAST(c.max_length AS VARCHAR(25))) + ')'
WHEN tp.[name] IN ('nvarchar','nchar') THEN tp.[name] + '(' + IIF(c.max_length = -1, 'max', CAST(c.max_length / 2 AS VARCHAR(25)))+ ')'
WHEN tp.[name] IN ('decimal', 'numeric') THEN tp.[name] + '(' + CAST(c.[precision] AS VARCHAR(25)) + ', ' + CAST(c.[scale] AS VARCHAR(25)) + ')'
WHEN tp.[name] IN ('datetime2') THEN tp.[name] + '(' + CAST(c.[scale] AS VARCHAR(25)) + ')'
ELSE tp.[name]
END
, [RawType] = tp.[name]
, [MaxLength] = c.max_length
, [Precision] = c.[precision]
, [Scale] = c.scale
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
WHERE s.[name] = 'dbo' AND t.[name] = 'MyTable'