كيف يمكنني الحصول على SQL Server مع تعريف العمود قوسين وكل شيء؟
-
05-07-2019 - |
سؤال
وأنا بحاجة إلى وسيلة ذكية للحصول على أنواع البيانات من INFORMATION_SCHEMA.COLUMNS بطريقة يمكن استخدامها في CREATE TABLE بيان. المشكلة هي حقول "إضافية" التي تحتاج إلى أن يكون مفهوما، مثل NUMERIC_
PRECISION وNUMERIC_
SCALE.
والواضح، ويمكنني أن تجاهل الأعمدة لعدد صحيح (دقة 10 و مقياس من 0)، ولكن هناك أنواع أخرى أود أن تكون مهتمة، مثل NUMERIC. حتى دون كتابة الكثير من التعليمات البرمجية لتحليل الجدول، أي أفكار عن كيفية الحصول على نوع من الاختزال الحقل من تعريف العمود؟
وأود أن تكون قادرة على الحصول على شيء من هذا القبيل: كثافة العمليات، التاريخ والوقت، مال، الرقمية ** (10،2) **
المحلول
وهنا هو التحديث (تهافت!) من الجواب GalacticCowboy لإصلاح بعض القضايا والتحديث لكافة (على ما أظن) أنواع البيانات SQL خادم 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
نصائح أخرى
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 البرمجة ينبغي أن تأخذ الرعاية من الأجيال النصي. وأعتقد أن هذا هو ما يستخدم MS في إدارة Studio SQL للأجيال النصي.
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
وهذا ما طلبتم. أقل من ذلك، سيكون لديك لتحليل معلومات المخطط عرض النتائج.
إذا كنت تستخدم SMO يمكنك الحصول على كل الدقة والحجم عن طريق الوصول إلى خصائص colletion من في كائن عمود
وColumn.Property [ "NumericScale"]. القيمة
وColumn.Property [ "NumericPrecision"]. القيمة