文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SQL语法提示工具SQL Prompt——添加NOT NUL

2024-04-02 19:55

关注

SQL Prompt是一款实用的SQL语法提示工具。SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读--当开发者不大熟悉脚本时尤其有用。SQL Prompt安装即可使用,能大幅提高编码效率。此外,用户还可根据需要进行自定义,使之以预想的方式工作。

本教程解释了在向现有表添加非可空列或将包含空值的列更改为非可空时可能遇到的问题。他演示了一个可以安全部署此类更改的迁移脚本。本文是教程的后半部分内容,内容紧接前文(点击这里查看)~

清单5:在创建列NOT NULL之前使用默认值更新现有行

所以,效果很好。

推出所有变更

现在是时候将所有这些更改推广到只有设计版本1、没有Location表格、CountingWords没有TheLanguage列和可空Word列的人员。

推出新Location表,因为它是该表的第一个版本,不是真正的问题(参见清单3)。但是,将更改推广到新CountingWords表需要添加一个TheLangauge不允许NULLs的Word列,并且NOT NULL在两种情况下都要更改列,以避免我们已经讨论过的问题。

我们还希望我们的迁移脚本能够正常工作,无论我们是否正在更新现有的v1 CountingWords,或者我们需要从头开始构建表的v2。此外,如果脚本意外重新运行,我们不希望脚本造成任何伤害或触发错误。

另外,在任何一种情况下,我们还需要将该TheLangauge列设置CountingWords为FOREIGN KEY自动更新以响应父键的更新或删除,以及更改PRIMARY KEY。作为最后一步,我们将添加11-20的旧威尔士语单词,这是我们以前不知道的。

以下是迁移脚本,它将CountingWords从v1 迁移到v2,或者从头开始创建v2,如果意外重新运行,这将不会造成任何损害。在尝试之前,要么删除CountingWords表,要么重新运行清单1以重新建立表的v1。

SQL语法提示工具SQL Prompt——添加NOT NUL

清单6:CountingWords v2的安全迁移脚本

如果不是为了确保迁移脚本在所有情况下都能正常工作,那就简单多了。我只是讨厌只能在特定情况下运行的构建脚本。

现在让我们通过在不同的语言或区域中添加一到二十的计数单词来测试它:

DECLARE @Language NVARCHAR(30) = 'West Cumbrian';
IF NOT EXISTS 
  (SELECT * FROM dbo.Location 
  WHERE TheLanguage LIKE @Language
  ) INSERT INTO dbo.Location (TheLanguage) 
      VALUES (@Language);

IF NOT EXISTS (SELECT * FROM CountingWords WHERE Thelanguage LIKE @Language)
INSERT INTO CountingWords (TheValue, Word, TheLanguage)
  SELECT TheValue, word, @Language
    FROM
      (
      VALUES ('yan', 1), ('tyan', 2), ('tethera', 3), ('methera', 4),
        ('pimp', 5), ('sethera', 6), ('lethera', 7), ('hovera', 8),
        ('dovera', 9), ('dick', 10), ('yan-a-dick', 11), ('tyan-a-dick', 12),
        ('tethera-dick', 13), ('nethera-dick', 14), ('bumfit', 15),
        ('yan-a-bumfit', 16), ('tyan-a-bumfi t', 17), ('tithera-bumfit', 18),
        ('methera-bumfit', 19), ('giggot', 20)
      ) AS f (word, TheValue);
GO

清单7:Yan,Tyan,Tethera——在西坎布里亚郡数到20

现在我改变了主意。它不应该被称为“老威尔士”,而是“古老的威尔士”。真可惜,但我们现在可以测试我们的外键约束。

UPDATE dbo.Location SET TheLanguage = 'Archaic Welsh' WHERE TheLanguage LIKE 'Old Welsh' 
SELECT * FROM location
SELECT * FROM CountingWords

清单8:更改语言后的级联更新

就像变魔法一样,所有引用都已更改。现在我有一个可以使用的数据库!

SQL语法提示工具SQL Prompt——添加NOT NUL

我提供了一个FillCountingWordsTable  脚本,其中包含47个记录位置和语言的完整计数单词集,可用于更广泛的测试。向美国的朋友和亲戚道歉,我遗漏了几个使用相同计数押韵的印第安部落。事实证明,他们被英国殖民者编织了,他们认为用于计算缝线的词语是魔法的一部分。

SQL语法提示工具SQL Prompt——添加NOT NUL

结论

我们刚刚建立了一个相当精细的演示,说明如何避免更改已填充数据的表的一些问题。在此示例中,问题涉及NULL值的使用,当您尝试添加无法接受NULL值的新列时,或者NOT NULL当列中存在现有NULL值时,将现有的可空列更改为列时,会发生这些问题。在第一种情况下,您只需DEFAULT首先向列添加约束,使用值不是NULL,在第二种情况下,NULL首先通过更新表来删除值。

这些是对现有表进行更改的技术,这就是为什么我详细阐述了演示如何将这两个操作作为弹性脚本的一部分进行操作的原因,无论是新建还是迁移,都可以运行,这可以重新运行而不会产生任何不利影响。


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯