Пишу утилиту на C#, утилита должна уметь автоматически создавать новые поля в таблицах SQL Server'а.
При этом поля NOT NULL должны заполняться значениями по умолчанию (или заданными значениями).
Т.е. делаю что-то вроде такого:
// формирую команду
//..........................
StringBuilder alter = new StringBuilder("ALTER TABLE [" + _tableName + "] ADD ");
foreach (var c in _createColumns)
{
alter.Append("[" + c.Name + "] " + c.DbType);
//.........................
// если встречаю not null поле
if (c.AllowNull==false)
alter.Append(" NOT NULL DEFAULT(@" + c.Name + ")");
//.........................
// И при выполнении запроса формирую параметры по умолчанию
public SqlParameter[] GetDefaultAlterParameters()
{
return _createColumns.Select(c => new SqlParameter(c.Name, GetDefaultValue(c.DotNetType))).ToArray();
}
Но, проблема в том, что нельзя использовать переменные в таких командах, получаю исключение вида:
Variables are not allowed in the ALTER TABLE statement.
Есть ли способ отключить или обойти этот запрет? Нашел
вариант через создание временных функций, но некрасиво получается.
Или лучший путь формировать сплошную строку команды, экранируя при необходимости значения?