1

我想运行一个ALTER TABLE向列添加默认值约束的方法。

我从 .NET 程序动态生成此语句。

在构建我的 sql 时,如何最好地格式化和引用该值 - 现在ALTER TABLE语句不支持参数(给出错误“ALTER TABLE 语句中不允许使用变量”)。

.NET 中是否有一个实用程序?还是另一种解决方案?

4

2 回答 2

1

您可以在 TSQL 中执行此操作;例如,假设您将命令参数化,传入@DefaultValuea varchar,它可能是也可能不是有效的 TSQL 文字。因为我们正在编写 DDL,所以我们需要连接 和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!
于 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 回答