gpt4 book ai didi

sql - 在对其执行操作之前检查表是否存在?

转载 作者:行者123 更新时间:2023-12-03 02:47:52 24 4
gpt4 key购买 nike

在寻找这个问题的答案时,我发现了这个popular post on StackOverflow 。不幸的是,它并不能完全发挥作用。问题是这样的:

有没有办法在执行修改之前检查表(或另一个对象)是否存在(例如 INSERT )?前面提到的帖子表明了这一点:

IF (EXISTS (SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'questionableTable'))
BEGIN
INSERT INTO dbo.questionableTable VALUES ('success!');
END

错误:Invalid object name 'dbo.questionableTable'.

这样做的问题是 SQL Server 在解析 INSERT 时失败。声明,指出dbo.questionableTable不存在。上一篇INFORMATION_SCHEMA检查似乎没有影响它。

有没有办法编写这种查询?尤其是对于 SQL Server。但我也希望看到其他数据库系统的类似操作(如果存在的话)。

这个问题背后的动机是因为我们有多个数据库,其中包含彼此表的子集。我想要的是有一个可以应用于所有数据库的单个脚本,并且仅修改那里存在的表(并且在执行时不会出错)。

最佳答案

通过 EXEC() 使用动态 SQL功能:

IF (EXISTS (SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'questionableTable'))
BEGIN
EXEC('INSERT INTO dbo.questionableTable VALUES (''success!'')');
END

EXEC() 函数将字符串作为 SQL 执行,但作为一个字符串,它在执行之前不会被评估,因此字符串中提到的表不会需要在编译时存在。这允许在创建表之前定义存储过程。

关于sql - 在对其执行操作之前检查表是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com