ALTER TABLE
列にデフォルト値の制約を追加するを実行したいと考えています。
このステートメントは、.NET プログラムから動的に生成します。
SQL を作成するときに値を最適にフォーマットして引用するにはどうすればよいですか。ALTER TABLE
ステートメントがパラメーターをサポートしていないためです (「変数は ALTER TABLE ステートメントでは許可されていません」というエラーが表示されます)。
.NET にそのためのユーティリティはありますか? または別の解決策?
ALTER TABLE
列にデフォルト値の制約を追加するを実行したいと考えています。
このステートメントは、.NET プログラムから動的に生成します。
SQL を作成するときに値を最適にフォーマットして引用するにはどうすればよいですか。ALTER TABLE
ステートメントがパラメーターをサポートしていないためです (「変数は ALTER TABLE ステートメントでは許可されていません」というエラーが表示されます)。
.NET にそのためのユーティリティはありますか? または別の解決策?
これは TSQL で行うことができます。たとえば、有効な TSQL リテラルである場合とそうでない場合がある を渡して@DefaultValue
、コマンドをパラメータ化するとします。DDL を作成しているため、 and を連結する必要がありますが、値が不正になる可能性があるため、やみくもに連結したくないことは明らかです。幸いなことに、私たちが必要とするすべてを行います。デフォルトでは を出力しますが、一重引用符と二重引用符の両方のリテラルに対して、リテラル エスケープ モードで動作するように指示できます。varchar
exec
quotename
quotename
[qualified object names]
したがって、受け入れるクエリは@DefaultValue
SQL 文字列を構築できます。
declare @sql nvarchar(4000) = 'alter table ...';
-- ... blah
-- append the default value; note the result includes the outer quotes
@sql = @sql + quotename(@DefaultValue, '''');
-- ... blah
exec (@sql);
完全な例:
--drop table FunkyDefaultExample
create table FunkyDefaultExample (id int not null)
declare @tableName varchar(20) = 'FunkyDefaultExample',
@colName varchar(20) = 'col name',
@defaultValue varchar(80) = 'test '' with quote';
-- the TSQL we want to generate to exec
/*
alter table [FunkyDefaultExample] add [col name] varchar(50) null
constraint [col name default] default 'test '' with quote';
*/
declare @sql nvarchar(4000) = 'alter table ' + quotename(@tablename)
+ ' add ' + quotename(@colName) + 'varchar(50) null constraint '
+ quotename(@colName + ' default') + ' default '
+ quotename(@defaultValue, '''');
exec (@sql);
-- tada!
string.Format("alter table YourTable add constraint DF_YourTable_Col1 default '{0}'",
inputValue.Replace("'", "''"));