在寻找这个问题的答案时,我在 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,尤其如此。但我也希望看到其他数据库系统的类似操作,如果存在这样的事情的话。
这个问题背后的动机是因为我们有多个数据库,其中包含彼此表的子集。我想要的是有一个可以应用于所有数据库的脚本,并且只修改那里存在的表(并且在执行时不会出错)。