2014-01-09 1 views
1

Я создаю проект в ASP.NET с помощью VS 2010 и SQL Server 2008.Получить размер поля с типом данных VARCHAR в SQL Server с помощью C#

Я хочу, чтобы получить размер столбцов, имеющих varchar тип данных.

например.

Varchar(20) 

Я хочу, чтобы получить 20 вместо максимально возможного размера для varchar используя C# код.

ответ

3

INFORMATION_SCHEMA.COLUMNS таблица дает информацию попробовать

SELECT table_catalog, 
     table_name, 
     column_name, 
     data_type, 
     character_maximum_length 
FROM information_schema.columns 
WHERE data_type = 'varchar' 
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 

Обратите внимание, что длина является число байтов. Для varchar это будет соответствовать символам. Для других типов данных это имеет разные значения (одним примером может быть nvarchar, который хранит каждый символ в 2 байтах и, следовательно, говорит вам в два раза больше).

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; 
} 
0

Вот еще один способ сделать это:

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 с вашими собственными значениями.

0
SELECT CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'YOUR_TABLE_NAME' 
Смежные вопросы