当前位置: 首页 > 面试题库 >

包装在IF EXISTS块中的UPDATE语句

翁宜年
2023-03-14
问题内容

我正在尝试编写更新列的DML脚本,但我想确保该列首先存在,因此我将其包装在IF EXISTS块中

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Client' AND COLUMN_NAME='IsClarityEnabled') 
BEGIN
    UPDATE Client SET IsClarityEnabled = 1 WHERE ClientID = 21
END

因此,很奇怪的是,即使条件失败,它也会尝试执行更新。因此,该列不存在,并且UPDATE语句运行,并且出现错误。为什么?

甚至更陌生的是这确实起作用:

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Client' AND COLUMN_NAME='IsClarityEnabled') 
BEGIN
    EXEC('UPDATE Client SET IsClarityEnabled = 1 WHERE ClientID = 21')
END

导致UPDATE行为如此的UPDATE命令有什么特别之处吗?


问题答案:

问题在于脚本将被编译/解析,并且如果该列不存在,则将出现编译/解析错误。

无效的列名称“ IsClarityEnabled”。



 类似资料:
  • 我一直在阅读有关SQL注入的文章,并决定修改我的代码以防止SQL注入。 例如,我有一个输入,我将值插入到我的数据库中。最初,我对注射的警惕是这样的: 在我读过的文章中,有人建议应该使用预准备语句。我更改了我的代码并使用了它: 虽然这可以防止SQL注入,但它不会对XSS做任何事情。所以我决定修改(并使用它来防止脚本注入。 现在,我的问题是如何使用预先准备好的语句。我将插入三个项目;艺术家、专辑和歌曲

  • 问题内容: 有我的问题,我有一个像这样的表: 当我创建表时,默认情况下排名为0,而我想要的是使用以下选择来更新表中的排名: 这个Select工作正常,但是我找不到使用它来更新table1的方法 我没有找到任何答案可以解决这种问题。如果有人可以给我任何有关是否可行的建议,我将不胜感激。 谢谢! 问题答案: 您可以加入 子查询 并执行 UPDATE : 在谓词中添加所需条件。 或者, 您可以使用 ME

  • 问题内容: 是否可以在更新语句中为int列设置NULL值? 在这种情况下,如何编写更新语句? 问题答案: 假设该列设置为支持NULL作为值: 请注意数据库的NULL处理-默认情况下,在SQL Server中,NULL是INT。因此,如果列是不同的数据类型,则需要CAST / CONVERT NULL为正确的数据类型: 在上面的示例中,假设是DATETIME数据类型。

  • 问题内容: 组件详细信息 -使用 IntelliJ IDEA 2017.1 CE 和 jdk-9-ea + 154 main() - module-info.java 日志 - 怀疑 VM初始化 的实现,我的问题是我没有包括模块-它从哪里来?如何调试此类模块的包含/排除?如何进一步解决当前的异常? 问题答案: $ JAVA_HOME / lib / jrt-fs.jar包含已编译为JDK 8的“

  • 问题内容: 我一直在阅读有关SQL注入的文章,并决定修改我的代码以防止SQL注入。 例如,我有一个输入,将值插入到数据库中。最初,我的预防注射措施是: 在我读过的文章中,有人建议应该使用准备好的语句。我已经更改了代码并使用了它: 尽管这可以防止SQL注入,但是它对XSS并没有任何作用。因此,我决定修改(removed )并使用它来防止脚本注入。 现在,我的问题是关于使用准备好的语句。我将插入三个项

  • 本文向大家介绍在MySQL中使用带有TINYINT的Update语句?,包括了在MySQL中使用带有TINYINT的Update语句?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表。我们已将其中一列设置为TINYINT类型- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是使用TINYINT实现UPDATE语句的查询- 让我们再次