我在一个明确要求我不要使用T-SQL语法的项目中工作。我们正在使用的应用程序支持T-SQL,但不允许使用它以避免潜在的迁移问题。
我的问题是:SELECT ... INTO语句是T-SQL还是SQL?如果是T-SQL,是否有特定的SQL查询将现有表复制到新表中? (我已经尝试过使用CREATE TABLE AS .. FROM,但是它不起作用)。
听起来像一个非常基本的问题,但我无法在任何地方找到答案。因此,除了上面的问题之外,知道是否有一个仅收集标准SQL语法的指南/词典/网站也将非常有帮助。
谢谢!
答案 0 :(得分:1)
我认为他们建议您使用ANSI SQL,而不要使用T-SQL(SQL Server)或PL-SQL(ORACLE)。将其视为通用需求,每个数据库供应商都提供了自己的实现此需求的方式。从一个数据库供应商转移到另一数据库供应商时,使用ANSI SQL不会出现迁移问题。
SQL SERVER
SELECT * INTO new_table
FROM existing_table
ORACLE和ANSI-SQL
CREATE TABLE new_table
AS SELECT * FROM existing_table
答案 1 :(得分:0)
是SELECT INTO TSQL还是SQL?
都不是。 MySQL文档声称SELECT INTO是对标准sql的Sybase扩展。因此,我认为您无法准确地说出它们都是其中之一,但是您可以说两者都不是。实际上,它已在T-SQL以及其他一些数据库供应商产品中用于根据查询创建表。 SQL标准规定,具有该目标的查询应形成为CREATE TABLE blah AS SELECT ...
。例如,Oracle / MySQL使用标准格式,尽管您可以看到它们在不同的上下文中使用SELECT INTO将数据分配给存储过程中的变量
如果要避免在创建和填充表时使用此非标准语法,则必须:
CREATE TABLE blah (column spec to match query output)
INSERT blah (select query here)
但是随后您会遇到细微差别,例如“ sqlserver将其称为datetime / datetime2,而oracle将其称为date / timestamp”
最终,您可能会陷入无法使用一种形式的sql来完成您想要做的所有事情的情况。
我想大多数在多个基础数据库上进行数据访问的库都具有在需要时使用供应商特定术语的机制
答案 2 :(得分:0)
从答案看来,您可能需要指定您正在说的SELECT INTO。其他答案似乎暗示当还有一种SELECT ... INTO << strong时,存在某种SELECT ... INTO << strong> 表名 > 本地变量名称列表 >。后者用于嵌入式SQL中,以使SQL与宿主语言程序的变量交互。我不确定,但是该变体也可以用在处理用SQL编写的过程的SQL语言部分中(标准的SQL / PSM部分)。
原则上,仅涵盖ISO的标准文档本身就是一个“参考”,只能从ISO购买(当然,是ISO 不 ANSI-ANSI删除所有非美国贡献者的姓名后,仅对ISO文档加盖章)。而不是最简单的文学。互联网上有一些“草稿”版本,可能与已发布的最终标准有所不同。例如。 http://www.wiscorp.com/sql200n.zip。请注意,这是一个SQL:2008草案。当前的标准版本是SQL:2011。它有数千页,所以我想涵盖了您的问题“ w3schools标准SQL中涵盖了所有语法”。 (提示:否)