Come posso ottenere la definizione di colonna di SQL Server con parentesi e tutto il resto?
-
05-07-2019 - |
Domanda
Ho bisogno di un modo intelligente per estrarre i tipi di dati da INFORMATION_SCHEMA.COLUMNS in un modo che possa essere utilizzato in un'istruzione CREATE TABLE. Il problema sono i campi 'extra' che devono essere compresi, come NUMERIC _
PRECISION e NUMERIC _
SCALE.
Ovviamente, posso ignorare le colonne per INTEGER (precisione di 10 e scala di 0), ma ci sono altri tipi che mi interesserebbero, come NUMERIC. Quindi, senza scrivere un sacco di codice per analizzare la tabella, qualche idea su come ottenere una sorta di stenografia del campo dalla definizione della colonna?
Vorrei poter ottenere qualcosa del tipo: Int, appuntamento, i soldi, ** numerico (10,2) **
Soluzione
Ecco un aggiornamento (ripoff!) di la risposta di GalacticCowboy per risolvere alcuni problemi e aggiornare per tutti (penso) Tipi di dati di SQL Server 2008R2:
select data_type +
case
when data_type like '%text' or data_type in ('image', 'sql_variant' ,'xml')
then ''
when data_type in ('float')
then '(' + cast(coalesce(numeric_precision, 18) as varchar(11)) + ')'
when data_type in ('datetime2', 'datetimeoffset', 'time')
then '(' + cast(coalesce(datetime_precision, 7) as varchar(11)) + ')'
when data_type in ('decimal', 'numeric')
then '(' + cast(coalesce(numeric_precision, 18) as varchar(11)) + ',' + cast(coalesce(numeric_scale, 0) as varchar(11)) + ')'
when (data_type like '%binary' or data_type like '%char') and character_maximum_length = -1
then '(max)'
when character_maximum_length is not null
then '(' + cast(character_maximum_length as varchar(11)) + ')'
else ''
end as CONDENSED_TYPE
, *
from information_schema.columns
order by table_schema, table_name, ordinal_position
Altri suggerimenti
select column_type = data_type +
case
when data_type like '%text' then ''
when data_type like '%char' and character_maximum_length = -1 then '(max)'
when character_maximum_length is not null then '(' + convert(varchar(10), character_maximum_length) + ')'
when data_type = 'numeric' then '(' + convert(varchar(10), isnull(numeric_precision, 18)) + ', ' +
convert(varchar(10), isnull(numeric_scale, 0)) + ')'
else ''
end
,*
from information_schema.columns
Gli script SMO dovrebbero occuparsi delle generazioni di script. Credo che questo sia ciò che MS utilizza in SQL Management Studio per generazioni di script.
http://msdn.microsoft.com/en-us/library /ms162153.aspx
@YourComment - Ho bisogno di un modo intelligente per estrarre i tipi di dati da INFORMATION_SCHEMA.COLUMNS in un modo che possa essere utilizzato in un'istruzione CREATE TABLE
Questo è quello che hai chiesto. A parte questo, dovrai analizzare i risultati della visualizzazione dello schema informativo.
Se stai usando smo puoi ottenere sia precisione che scalabilità accedendo alla raccolta Proprietà di Oggetto colonna
Column.Property [" NumericScale "]. Valore
Column.Property [" NumericPrecision "]. Valore