1

ALTER TABLE列にデフォルト値の制約を追加するを実行したいと考えています。

このステートメントは、.NET プログラムから動的に生成します。

SQL を作成するときに値を最適にフォーマットして引用するにはどうすればよいですか。ALTER TABLEステートメントがパラメーターをサポートしていないためです (「変数は ALTER TABLE ステートメントでは許可されていません」というエラーが表示されます)。

.NET にそのためのユーティリティはありますか? または別の解決策?

4

2 に答える 2

1

これは TSQL で行うことができます。たとえば、有効な TSQL リテラルである場合とそうでない場合がある を渡して@DefaultValue、コマンドをパラメータ化するとします。DDL を作成しているため、 and を連結する必要がありますが、値が不正になる可能性があるため、やみくもに連結したくないことは明らかです。幸いなことに、私たちが必要とするすべてを行います。デフォルトでは を出力しますが、一重引用符と二重引用符の両方のリテラルに対して、リテラル エスケープ モードで動作するように指示できます。varcharexecquotenamequotename[qualified object names]

したがって、受け入れるクエリは@DefaultValueSQL 文字列を構築できます。

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!
于 2013-06-17T12:05:00.000 に答える
1
string.Format("alter table YourTable add constraint DF_YourTable_Col1 default '{0}'",
    inputValue.Replace("'", "''"));
于 2013-06-17T11:48:38.493 に答える