最近做分布式管理系统时,遇到需要设置新添加用户的默认密码。考虑几种方案,感觉直接修改数据表该字段的默认值非常有效和方便。
下面是读取表中指定字段的默认值的代码和更改表中默认值的代码。
--查看某表某字段的默认值 备注:查处的默认值形如('123456'),在程序中自己去掉('')
CREATE PROCEDURE SelFieldDefault
(
@DefaultPwd nvarchar(100) output --指定表指定字段的默认值
)
AS
declare @T_Name varchar(50) --表名称
declare @Field varchar(50) --表字段
set @DefaultPwd=''
set @T_Name='tb_RadiusUser'
set @Field='UserPwd'
select @DefaultPwd=m.text
from syscolumns c inner join systypes t
on c.xusertype=t.xusertype
left join sysproperties p
on c.id=p.id and c.colid = p.smallid
left join syscomments m
on c.cdefault=m.id
where object_name(c.id)=@T_Name
and c.name=@Field
--更新字段的默认值
CREATE PROCEDURE UptFieldDefault
(
@NewDefault nvarchar(100) --新默认值
)
AS
declare @T_Name varchar(50) --表名称
declare @Field varchar(50) --表字段
declare @Constraints varchar(32), --约束名
@sql nvarchar(1000) --执行的SQL语句
set @T_Name='tb_RadiusUser'
set @Field='UserPwd'
select @Constraints= c.name from sysconstraints a
inner join syscolumns b on a.colid=b.colid
inner join sysobjects c on a.constid=c.id
where a.id=object_id(@T_Name)
and b.name=@Field
if(@Constraints is not Null) --原来有默认值需删除
begin
set @sql='Alter table '+@T_Name+' drop constraint ['+@Constraints+']'
execute sp_executesql @sql
end
set @sql='ALTER TABLE '+@T_Name+' add DEFAULT ('''+@NewDefault+''') for '+@Field+' WITH VALUES' --@NewDefault左右用3个单引号【相当于加''】
execute sp_executesql @sql