Frage

Ich brauche eine intelligente Art und Weise die Datentypen aus INFORMATION_SCHEMA.COLUMNS in eine Art und Weise zu erhalten, die in einer CREATE TABLE-Anweisung verwendet werden könnte. Das Problem ist die ‚Extras‘ Felder, die verstanden werden müssen, wie NUMERIC_PRECISION und NUMERIC_SCALE.

Natürlich kann ich die Spalten für INTEGER (Genauigkeit von 10 und Skala von 0) ignorieren, aber es gibt auch andere Arten Ich würde interessieren, wie NUMERIC. Also ohne viele Code zu schreiben, die Tabelle zu analysieren, alle Ideen auf, wie eine Art Feldkurzschrift aus der Spaltendefinition zu bekommen?

Ich möchte in der Lage sein, etwas zu bekommen, wie: int, Terminzeit, Geld, numerisch ** (10,2) **

War es hilfreich?

Lösung

Hier ist ein Update (Gaunerei!) Von Galactic Antwort einige Probleme und Aktualisierung für alle zu beheben (glaube ich) SQL Server 2008R2-Datentypen:

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

Andere Tipps

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

SMO Scripting sollten Pflege der Skript Generationen dauern. Ich glaube, das ist das, was MS verwendet in SQL Management Studio für Script-Generationen.

http://msdn.microsoft.com/en-us/library /ms162153.aspx

@YourComment - I need a smart way to get the data types out of INFORMATION_SCHEMA.COLUMNS in a way that could be used in a CREATE TABLE statement

Dies ist, was Sie gefragt. Kurz von dem, sehen Sie die Info-Schema Ansicht Ergebnisse analysieren müssen.

Wenn Sie mit smo Sie durch den Zugriff auf die Eigenschaften colletion der Column-Objekt

Column.Property [ "NumericScale"]. Wert

Column.Property [ "NumericPrecision"]. Wert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top