在 T-SQL 中,我可以这样陈述:
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'tableName')
DROP TABLE [dbo].[tableName]
go
以下SQL命令的批处理终止符等价于哪个(即"go")?
DROP TABLE IF EXISTS tableName
在 T-SQL 中,我可以这样陈述:
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'tableName')
DROP TABLE [dbo].[tableName]
go
以下SQL命令的批处理终止符等价于哪个(即"go")?
DROP TABLE IF EXISTS tableName
根据 SQL Server 文档:
GO 不是一个 Transact-SQL 语句,而是一个由 sqlcmd 和 osql 实用程序以及 SQL Server Management Studio 代码编辑器识别的命令。
该语法允许在 go 关键字后面有一个数字,以便重复前面的行多次。语法如下:
GO [count]
它分离了批处理。PostgreSQL没有相应的功能。分号是结束语句而不是批处理,并且不可能指定执行次数。
参考资料: https://msdn.microsoft.com/it-it/library/ms188037.aspx
PostgreSQL的等效语句为:
DROP TABLE IF EXISTS tableName;
;
。GO
是批处理语句终止符,一个批处理内可以执行多个语句,而GO
则终止该批处理。GO
很重要,因为它可以用来创建包含正常语句和必须作为批处理中唯一语句的语句的单个脚本。 - NathanAldenSrGO
是分隔符(定界符) - 它是一个特殊的关键字,不用于任何 SQL 语句。PostgreSQL 使用分号 ;
作为分隔符。在控制台 psql 中,您可以使用 \g
。postgres=# select 10 as a
postgres-# \g
+----+
| a |
+----+
| 10 |
+----+
(1 row)
但这种方法并不经常使用。有时候人们会使用\gset
来执行SQL语句并将结果存储到psql
本地变量中。PostgreSQL可以使用分号,因为PostgreSQL SQL语句不需要包含此符号 - 这与T-SQL不同,因为T-SQL允许一些过程构造直接在SQL中使用 - 然后T-SQL需要特殊的分隔符。PostgreSQL不允许这样做 - 过程代码必须输入为字符串 - 并通过单引号或自定义字符串分隔符进行分隔。因此,过程性条件删除可能如下所示:
DO $$BEGIN
IF EXISTS (SELECT * FROM information_schema.tables
WHERE table_name = 'someTable') -- attention CASE SENSITIVITY
THEN
DROP TABLE "someTable"; -- attention CASE SENSITIVE syntax
END IF;
END $$;
DROP TABLE IF EXISTS someTable
。我使用了自定义的字符串分隔符$$
。DO $$ -- DO command with start of string (started by custom separator)
... -- some procedural code
$$ ; -- end string by custom separator and semicolon as end of DO command
DROP TABLE
命令看起来本身就很好。 - Politank-ZGO
不是一条语句,而是仅用于SQL Server Management Studio的分隔符。它并不是SQL / T-SQL语言的一部分。 - marc_s;
,您也应该开始在SQL Server中使用它:https://sqlblog.org/2009/09/03/ladies-and-gentlemen-start-your-semi-colons - user330315GO
在 SQL Server 中结束了一个语句的范围,并且使用它会删除局部变量,那么;
是否也像这样结束了一个范围呢? - shA.t