我正在编写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作为参考
答案 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?"?":""#>