22

我是 SQL 新手。我们有一些代码可以在 SQL Server 2005/2008、Oracle 10 以及 Sybase 上运行。

我正在编写一个脚本来尝试找出给定存储过程修改(但不删除)哪些表,例如insertupdatedelete

结果delete令人费解-有时我会看到以下陈述:

delete phone_book where ... 

相对于:

delete from phone_book where ...

那么......from在这种情况下,关键字真的是可选的吗?这会导致任何问题吗?这只是一种糟糕的风格,还是无关紧要?

我还没有找到可以T-SQL选择的参考from。我想这就是统一我上面提到的所有 3 个供应商的原因。

欢迎提出问题/评论/链接(或者是否欢迎?)。

4

4 回答 4

13

在这个地方FROM是可选的(SQL ServerOracleSybase)。

但是,存在细微差别:例如,Oracle 允许为表名分配别名,而 SQL Server 则不允许;和其他的东西也有点不同。

另请注意,您的FROM样本与以下强制性样本不同:

DELETE phone_book FROM some_table WHERE ...
于 2010-12-19T17:48:19.640 回答
10

简短答案:Luceros 答案是正确的:它是可选的

我必须维护 sql 并在 sql-server 和 Oracle 之间进行调整。以下是一些规则:

  1. 手动编写脚本,不要使用生成的代码。
  2. 始终使用 INSERT INTO。
  3. 始终删除 - 没有 FROM。
  4. 不要使用 " - 带引号的标识符。
  5. 删除所有 [ ] 和 dbo。(架构名称)
  6. 当您看到 DELETE ... FROM ... 时请注意
  7. 当您看到 UPDATE ... FROM ... 时请注意
  8. ORACLE Select 语句需要一个 from 子句,您可以使用 from DUAL

    1. 好的,您可以编写对象脚本并以标准方式对其进行编辑
      • USE [Current_DB] -- 你不希望你的测试数据库的引用进入生产脚本
      • SET ANSI_NULLS ON -- 决定使用哪些设置 -- 不要打开和关闭
      • SET QUOTED_IDENTIFIER ON -- 带引号的标识符区分大小写。
    2. Oracle 需要 INSERT INTO。
    3. 那是我的个人风格不要使用可选关键字,学习默认值
    4. 您必须引用一个标识符,如果您使用 ORACLES 保留关键字之一作为列名,我们就进入了这个陷阱,从长远来看,在 sql-Server 端重命名该列会更好。
    5. Oracle 不使用这些。
    6. Oracle 不支持这种语法。
    7. Oracle 不支持这种语法。
于 2010-12-19T17:59:56.260 回答
2

在 Microsoft SQL Server 文档中,FROM 是可选的。

于 2010-12-19T17:50:18.447 回答
0

from在这三个 DBMS中是可选的delete from,但根据 SQL 标准它是强制性的。我总是用它delete from来简化 SQL 代码从一个 DBMS 到另一个的迁移。

于 2022-03-01T00:25:17.027 回答