zoukankan      html  css  js  c++  java
  • SqlServer修改某个字段的默认值时的操作步骤

    sqlserver有时候需要修改一个字段的默认值,却发现修改(update)不了,也删除(delete)不了,排查发现,需要先删除原有的默认值约束,才行;步骤如下1、2、3。
    若原来这个字段就没有默认值,则直接执行步骤3的sql;注意,需要显示声明默认值约束,否则系统会默认生成后缀为随机字符串的约束;不利于维护和无法做到见名知意

    1,删除原有字段上的默认值约束
    use [yourDBName];--数据库名
    declare @tableName nvarchar(100);--表名
    declare @columnName nvarchar(100);--列名
    declare @cnt nvarchar(100);
    declare @sqlcmd nvarchar(1024);
    set @tableName='yourTableName'
    set @columnName='yourColumnName'
    select @cnt= b.name from sysobjects b join syscolumns a on b.id = a.cdefault where a.id = object_id(@tableName) and a.name = @columnName
    set @sqlcmd = 'ALTER TABLE '+ @tableName +' DROP constraint ' + @cnt;
    exec sp_executesql @sqlcmd

    2,删除该字段

    ALTER TABLE [schema].[yourTableName] DROP column yourColumnName

    3,重新添加字段

    ALTER TABLE [dbo].[yourTableName] ADD yourColumnName int NOT NULL
    CONSTRAINT DF_yourTableName_yourColumnName  DEFAULT ((-1));
    EXEC sp_addextendedproperty N'MS_Description', N'字段注释', N'SCHEMA', N'dbo',N'TABLE', N'yourTableName', N'COLUMN', N'yourColumnName ';

    4,关于sqlserver约束,这篇文章总结的不错
    https://www.cnblogs.com/wy123/p/9205079.html#4431990

    5,扩展:为什么要设置数据库字段 default  xxx  not null  ?

    1,mysql存储null需要占用space来标识这个字段是不是存的null;如果default 空 那就完美了,因为空不占用space!

    2,sqlserver:如果一个表字段中含有NULL的数据(NULL表示可以为任何值),那么,SQL Server在做数据库比较操作的时候,会使用三值逻辑(TRUE,FALSE,UNKNOWN),而不是平时的二值逻辑(TRUE,FALSE)。因此,在做数据库设计的时候,我们都要求尽量将表不要设置为NULL类型,如果业务要求需要有空值,我们尽量用实际的默认值来代替NULL(int我们用0,字符串可以是空串等),这样SQL Server在做比较运算就不会使用到相对复杂的三值逻辑,而采用二值逻辑。

  • 相关阅读:
    正则表达式
    Java 枚举(enum) 详解7种常见的用法
    【20170921】(Unfinished)2017暑假北京学习 day 2
    (Unfinished)2017暑假北京学习 day 2
    Openjudge NOI题库 数论4975 两只鼹鼠
    Openjudge NOI题库 数论185 反正切函数的应用
    Noip1998 提高组3 卢斯加法表
    【自己的小玩具程序】化学方程式配平【测试中】【未完成】
    Code Vs 1010 过河卒
    NOI 练手题 图像旋转翻转变换
  • 原文地址:https://www.cnblogs.com/hbuuid/p/11911759.html
Copyright © 2011-2022 走看看