在T-SQL中,我可以说:
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'tableName')
DROP TABLE [dbo].[tableName]
go
以下SQL命令的等效批处理终结符是什么(即" go")?
DROP TABLE IF EXISTS tableName
答案 0 :(得分:8)
PostgreSQL的等价物是:
DROP TABLE IF EXISTS tableName;
因此终结符只是SQL标准的分号;
。
答案 1 :(得分:6)
从SQL Server文档:
GO不是Transact-SQL语句;这是一个被公认的命令 sqlcmd和osql实用程序以及SQL Server Management Studio代码 编辑器。
语法允许在关键字go之后有一个数字,以多次重复前一行。语法是:
GO [count]
它分离批次。 PostgreSQL没有相应的功能。分号结束语句,而不是批处理。并且无法指定执行次数。
答案 2 :(得分:4)
这取决于。 GO
是分隔符(分隔符) - 它是在任何SQL语句中都不使用的特殊关键字。 PostgreSQL使用分号;
作为分隔符。在console 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