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

时间:2010-02-16 15:56:01

标签: sql-server smo

我正在编写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 个答案:

答案 0 :(得分:11)

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。

因此DECIMAL(12,4)精度为12位数(总计),其中4位小数点后(刻度),因此为8位数在小数点之前。

但那些应该是你正在寻找的领域,对吗?

答案 1 :(得分:3)

尝试:

column.Properties["Length"].Value

答案 2 :(得分:0)

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

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