我正在使用VS 2010和SQL Server 2008在ASP.NET中创建一个项目。
我想检索具有varchar
数据类型的列的大小。
e.g。
Varchar(20)
我希望使用c#代码获得20而不是varchar
的最大可能大小。
答案 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();
}
只需将ConnectionString
,Table
和Column
替换为您自己的值。
答案 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'