sql - 为什么当我创建已经存在的表时,SAS、Proc SQL 不会抛出错误

标签 sql sql-server sas ssms

这里是 SAS 初学者。

简介: 在 SQL Server Management Studio 中,当您尝试创建已存在的对象/表时,会引发错误。所以解决方案是先删除表,然后再创建它。

那么在 SAS 中我怎么可以写这样的东西......(假装示例表存在)

PROC SQL;
    CREATE TABLE Example AS
        SELECT *
        FROM Work.Test;
QUIT;

问题: 即使示例对象/表已经存在,也不会引发错误。有谁知道为什么 SAS 或 SQL Server Management Studio 在这方面有所不同?

最佳答案

SAS 有一个默认值 OPTION REPLACE ,它告诉 SAS 您希望允许这种行为。

如果您想禁用此功能,请设置OPTION NOREPLACE。然而,正如上面的文档所述,这不会阻止上面的执行,因为它位于 work 库(这是一个临时库)中。

至于原因(为什么事情不同),毫无疑问是由于语言使用方式的历史差异造成的。 SAS 并不是真正的数据库语言(尽管它与数据库语言有很多相同之处,包括内置的 PROC SQL);它也比 SQL Server 早得多(起源于 20 世纪 60 年代,甚至更早的 PL/1 和 PL/2)。 SQL Server 为您提供了许多用于就地更新表的工具; SAS 有许多这样的工具,但由于各种原因,SAS 程序员倾向于替换表而不是就地更新它们。

关于sql - 为什么当我创建已经存在的表时,SAS、Proc SQL 不会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33443779/

相关文章:

mysql - 考虑到序列/自动增量的不同实现,我如何创建一个可以跨不同 rdbms 工作的 SQL 插入语句?

sql-server - SQL Server 08 - 枢轴 - 更改列名

sql-server - Sql server 2008 service broker 百万队列

r - SAS:如何将所有数据集变量包含到模型中

sas - 从 proc sql 写入文件

sas - 如何选择一组中出现次数最多的值(不是全部,只有一个)

mysql - 将一个表中单列的所有行更新到另一个数据库中的同一表

SQL Server - 选择所有顶部的小时记录

mysql - 分布式数据库同步

sql服务器回滚