代码之家  ›  专栏  ›  技术社区  ›  DannykPowell

使用SQL Server管理对象(SMO)获取列的长度

  •  4
  • DannykPowell  · 技术社区  · 15 年前

    我正在编写T4模板以生成CRUD存储过程等

    我正在使用SMO循环表的列:

    For Each column As Column In table.Columns
        WriteLine("@" & column.Name & " " & column.DataType.Name & ", ")
    Next
    

    我的问题是如何找到varchar列的长度?列上似乎没有任何length/maxlength等属性。

    我在用 http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.column_members.aspx 作为参考

    3 回复  |  直到 7 年前
        1
  •  11
  •   marc_s HarisH Sharma    15 年前

    这个 Column 类型具有一个名为 DataType 其中包含您要查找的这些信息:

    int maxLen = column.DataType.MaximumLength;
    int maxPrecision = column.DataType.NumericPrecision;
    int numericScale = column.DataType.NumericScale;
    

    等等。并不是所有字段都为每种类型填充,显然-varchar上的数字刻度没有意义….

    退房 MSDN docs on precision, scale and max length . 主要句子如下:

    精度是 号码。小数位数 A中小数点的右边 号码。例如,数字123.45 精度为5,刻度为2。

    所以A DECIMAL(12,4) 有一个 精度 共12位,其中4位在小数点后 规模 )因此,8位在小数点之前。

    但这些应该是你要找的领域,对吧?

        2
  •  3
  •   Lloyd Powell binku    12 年前

    尝试:

    column.Properties["Length"].Value
    
        3
  •  0
  •   Hadi Salehy    7 年前

    可以使用以下代码获取所有字段属性:

    <#= propertyType #>
    <#=col.DataType.MaximumLength#>
    <#=col.Nullable?"?":""#>