Как мне создать новую таблицу, берущую столбцы из information_schema.columns с точностью и масштабом? - PullRequest
2 голосов
/ 29 мая 2019

Я пытаюсь создать таблицу из файла information_schema.columns.Мне нужна точность и масштаб, чтобы он помог мне с десятичным типом данных.Проблема, с которой я сталкиваюсь здесь, для INT, я получаю точность и масштаб, который не может быть вставлен.Может кто-нибудь помочь мне с выбором столбцов?Например: мне нужно выражение select, которое дает такой вывод, который я выбираю из таблицы A, в ней 3 столбца

name varchar(10),
price decimal(5,2),
Id int,

Что я получаю из запроса, который я подставил

name varchar(10),
price decimal(5,2),
Id int(10,0)

currentзапрос:

SELECT COLUMN_NAME +' ' + DATA_TYPE + ISNULL('('+CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(10))+') ','') + ISNULL('('+CAST(NUMERIC_PRECISION AS VARCHAR),'')+ISNULL(','+CAST(NUMERIC_SCALE)AS VARCHAR)+')','')+',' FROM INFORMATION_SCHEMA.COLUMNS

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Это работает для меня

SELECT COLUMN_NAME +' ' + DATA_TYPE + 

case DATA_TYPE when 'VARCHAR'  then

ISNULL('('+CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(10))+') ','')
+ ISNULL('('+CAST(NUMERIC_PRECISION AS VARCHAR),'')
+ ISNULL(','+CAST(NUMERIC_SCALE AS VARCHAR)+')','')+','

 when 'nVARCHAR'  then

ISNULL('('+CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(10))+') ','')
+ ISNULL('('+CAST(NUMERIC_PRECISION AS VARCHAR),'')
+ ISNULL(','+CAST(NUMERIC_SCALE AS VARCHAR)+')','')+','

when 'decimal'  then

ISNULL('('+CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(10))+') ','')
+ ISNULL('('+CAST(NUMERIC_PRECISION AS VARCHAR),'')
+ ISNULL(','+CAST(NUMERIC_SCALE AS VARCHAR)+')','')+','

else
''
end 

FROM INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME='A'

но вы должны добавить свой случай, если у вас больше, чем я сделал

0 голосов
/ 29 мая 2019

попробуйте, если работает

create table Tbl
(
    name varchar(10),
    price decimal(5,2),
    Id int
)

select 
concat(
    name,' ',
    case system_type_id 
        when 167 then 'varchar('+cast(max_length as varchar(10))+'), ' 
        when 106 then 'decimal('+cast(precision as varchar(10))+','+cast(scale as varchar(10))+'), '
        when 56 then 'int, ' 
        --add more case for more datatype
    else '' end
    )
From sys.columns 
where object_id=(select object_id from sys.tables where name='tbl')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...