Где мне найти метаданные Sql Server для типов данных столбца?

Я знаю, что могу получить доступ к свойствам столбца через:

select * 
from sysobjects

Однако я не могу найти информацию о том, где получить тип и длину типа для столбец, например: в

FOO VARCHAR(80)

Где я могу найти часть "VARCHAR (80)" объявления типа в таблицах метаданных?

Я попытался посмотреть таблицу systypes, но ее значения для xtype не совпадают со значениями xtype в таблице sysobjects.

* У меня нет доступа к исходному SQL, который использовался для построения этих таблиц, и у меня нет прав администратора.

Если вы знакомы с DB2, я ищу эквивалент

select name,
       coltype,
       length,
  from sysibm.syscolumns
where tbname = 'FOO'
12
задан gotqn 3 September 2015 в 09:04
поделиться

1 ответ

Для построения на ответах выше часто полезно получить тип данных столбца в том же формате, что необходимо объявить столбцы.

, Например, 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'
1
ответ дан 2 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

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