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

Dan*_*ell 4 sql-server smo

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

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

For Each column As Column In table.Columns
    WriteLine("@" & column.Name & " " & column.DataType.Name & ", ")
Next
Run Code Online (Sandbox Code Playgroud)

我的问题是如何找到varchar列的长度?列上似乎没有任何Length/MaxLength etc属性.

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

mar*_*c_s 12

Column类型有一个名为的属性DataType,其中包含您正在寻找的这些信息:

int maxLen = column.DataType.MaximumLength;
int maxPrecision = column.DataType.NumericPrecision;
int numericScale = column.DataType.NumericScale;
Run Code Online (Sandbox Code Playgroud)

等等.并非所有字段都为每种类型填充,显然 - VARCHAR上的数字缩放没有意义....

查看有关精度,比例和最大长度MSDN文档.主要的一句是这样的:

精度是数字中的位数.Scale是数字中小数点右边的位数.例如,数字123.45的精度为5,标度为2.

因此a DECIMAL(12,4) 具有12位数(总计)的精度,其中4位于小数点后(刻度),因此8位数位于小数点之前.

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