【问题标题】:How to add column with default string如何使用默认字符串添加列
【发布时间】:2020-07-24 13:04:34
【问题描述】:

我正在尝试通过向其添加nvarchar 列来更新表,并将其设置为默认值字符串。运行查询不会将默认值设置为我的目标字符串,而是设置为NULL

查询

IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Files' AND COLUMN_NAME='CreatedIn') 
BEGIN
    ALTER TABLE Files ADD CreatedIn [nvarchar](10) default 'pm'
    EXEC sys.sp_executesql N'UPDATE Files SET CreatedIn = "pm" '; 
END

我希望将所有行的列 CreatedIn 设置为 "pm"。但是它仍然为空。

【问题讨论】:

    标签: sql-server default alter-table


    【解决方案1】:

    两个变化:

    -- 1. need NOT NULL here (and always use N prefix for Unicode literals)
    
    ALTER TABLE Files ADD CreatedIn [nvarchar](10) NOT NULL default N'pm';
    
    -- 2. need to double-up single quotes here, not use double quotes
    --    double quotes are used to denote identifiers
    
    EXEC sys.sp_executesql N'UPDATE Files SET CreatedIn = N''pm'';';
    

    但是,不再需要第二个语句。在当前形式下,它应该彻底失败,除非有一个名为 pm 的兼容列。

    【讨论】:

      【解决方案2】:
      ALTER TABLE {TABLENAME} 
      ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
      CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
      WITH VALUES
      

      【讨论】:

      • 嗨,阿杰,感谢您的贡献。您介意解释您的回答,并根据所提出的问题添加一个示例来扩展它吗?还强烈建议提供指向答案来源的链接。
      • 欢迎来到 StackOverflow!您能否提供一些背景信息或解释为什么这会回答 OP 的问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多