使用C#检索SQL Server中具有varchar数据类型的字段的大小

时间:2014-01-09 05:39:23

标签: c# sql sql-server-2008

我正在使用VS 2010和SQL Server 2008在ASP.NET中创建一个项目。

我想检索具有varchar数据类型的列的大小。

e.g。

Varchar(20)

我希望使用c#代码获得20而不是varchar的最大可能大小。

5 个答案:

答案 0 :(得分:3)

information_schema.columns表给出了信息 尝试

SELECT table_catalog, 
       table_name, 
       column_name, 
       data_type, 
       character_maximum_length 
FROM   information_schema.columns 
WHERE  data_type = 'varchar' 

答案 1 :(得分:1)

试试这个:

public int GetColumnMaxLength(string tableName, string columnName)
{
    string query = @"SELECT max_length
                     FROM sys.columns c 
                     INNER JOIN sys.tables t ON t.object_id = c.object_id
                     WHERE t.Name = @TableName
                     AND c.Name = @ColumnName";

    int result = -1;

    using (SqlConnection conn = new SqlConnection("your-connection-string-here"))
    using (SqlCommand cmd = new SqlCommand(query, conn))
    {
        cmd.Parameters.Add("@TableName", SqlDbType.VarChar, 100).Value = tableName;
        cmd.Parameters.Add("@ColumnName", SqlDbType.VarChar, 100).Value = columnName;

        conn.Open();
        result = (int)cmd.ExecuteScalar();
        conn.Close();
    }

    return result;
}

答案 2 :(得分:1)

这是另一种方法:

using(var conn = new SqlConnection("ConnectionString"))
{
    conn.Open();
    var cmd = new SqlCommand("SELECT * FROM Table WHERE 1 = 0", conn);
    var reader = cmd.ExecuteReader();
    var schema = reader.GetSchemaTable();
    var size = schema.AsEnumerable()
                     .Single(s => s.Field<string>("ColumnName") == "Column")
                     .Field<int>("ColumnSize");
    conn.Close();
}

只需将ConnectionStringTableColumn替换为您自己的值。

答案 3 :(得分:0)

根据您使用的数据框架,可能有一种更简单的支持方式来执行此操作,但只需直接使用SQL获取答案,您可以从sys表中获取这些值。

查询的一个例子是:

select t.name as tableName, c.name as columnName, c.max_length
from sys.columns c
join sys.tables t on c.object_id=t.object_id

请注意,length是一个字节数。对于varchar,这将对应于字符。对于其他数据类型,这有不同的含义(一个例子是nvarchar,它将每个字符存储在2个字节中,因此告诉你两倍的数字)。

答案 4 :(得分:0)

SELECT CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'YOUR_TABLE_NAME'