什么是PostgreSQL等同于TSQL" go"声明?

时间:2015-06-09 00:51:45

标签: postgresql tsql

在T-SQL中,我可以说:

IF EXISTS (SELECT name 
           FROM   sysobjects 
           WHERE  name = 'tableName') 
  DROP TABLE [dbo].[tableName] 
go 

以下SQL命令的等效批处理终结符是什么(即" go")?

DROP TABLE IF EXISTS tableName

3 个答案:

答案 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没有相应的功能。分号结束语句,而不是批处理。并且无法指定执行次数。

参考:https://msdn.microsoft.com/it-it/library/ms188037.aspx

答案 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