Come posso ottenere la definizione di colonna di SQL Server con parentesi e tutto il resto?

StackOverflow https://stackoverflow.com/questions/253324

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) **

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top