0

このテーブルを考えると:

ここに画像の説明を入力

そしてこのクエリ:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH,
  NUMERIC_PRECISION, IS_NULLABLE
FROM
  INFORMATION_SCHEMA.COLUMNS 
WHERE
  TABLE_NAME='PARAMETERS'
ORDER BY TABLE_NAME, ORDINAL_POSITION

私はこの結果を得ます:

ここに画像の説明を入力

整数列のサイズを取得するにはどうすればよいですか? PAR_ID(長さ = 2) の場合、5 を取得しますNUMERIC_PRECISION

の定義NUMERIC_PRECISIONは「近似数値データ、真数値データ、整数データ、金額データの精度。それ以外はNULLを返す」です。しかし、なぜ smallint(2) の値が 5 で、たとえば float(8) の値が 53 なのですか? この値は何を意味しますか?

アップデート:

@Ed_Harper に感謝: 長さと精度には違いがあります。長さは、数値を格納するために使用されるバイト数です。精度は、数値の桁数です。参照: http://goo.gl/EOTyC

4

3 に答える 3

0

SQL 2000の場合は、これを試してください(テストされていません)。

SELECT c.name AS ColumnName, TYPE_NAME(c.xusertype) AS DataType, 
    c.length, c.PREC, c.scale
FROM sysobjects t
    JOIN syscolumns c ON t.id = c.id
WHERE t.name = 'PARAMETERS'

SQL 2005以降から試してみてください:

代わりにsys.columnsを試してください...

SELECT c.name AS ColumnName, ty.name AS DataType, c.max_length, 
    c.precision, c.scale
FROM sys.tables t
    JOIN sys.columns c ON t.object_id = c.object_id
    JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE t.name = 'PARAMETERS'
于 2012-10-04T13:32:19.713 に答える
0

これを試して:

SELECT c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH,
  c.NUMERIC_PRECISION, c.IS_NULLABLE,sc.max_length
FROM
  INFORMATION_SCHEMA.COLUMNS c inner join sys.columns sc
  on c.TABLE_NAME=object_name(sc.object_id)
WHERE
  c.TABLE_NAME='PARAMETERS'
ORDER BY TABLE_NAME, ORDINAL_POSITION

SQL サーバー 2000

  SELECT distinct c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH,
  c.NUMERIC_PRECISION, c.IS_NULLABLE,sc.length
FROM
  INFORMATION_SCHEMA.COLUMNS c inner join syscolumns sc

  on c.TABLE_NAME=object_name(sc.id)
WHERE
  c.TABLE_NAME='PARAMETERS'
于 2012-10-04T13:33:59.043 に答える