在T-SQL中,我可以说:
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'tableName')
DROP TABLE [dbo].[tableName]
go
Run Code Online (Sandbox Code Playgroud)
以下SQL命令的等效批处理终结符(即"go")是什么?
DROP TABLE IF EXISTS tableName
Run Code Online (Sandbox Code Playgroud)
PostgreSQL等价物将是:
DROP TABLE IF EXISTS tableName;
Run Code Online (Sandbox Code Playgroud)
所以终结符只是SQL标准的分号;.
从SQL Server文档:
GO不是Transact-SQL语句; 它是sqlcmd和osql实用程序以及SQL Server Management Studio代码编辑器可识别的命令.
语法允许在关键字go之后具有一个数字,以多次重复前一行.语法是:
GO [count]
Run Code Online (Sandbox Code Playgroud)
它分离批次.没有PostgreSQL的等价物.分号结束语句,而不是批处理.并且无法指定多个执行.
参考资料:https://msdn.microsoft.com/it-it/library/ms188037.aspx
这取决于。GO是分隔符(定界符)-这是一个特殊关键字,在任何SQL语句中均不使用。PostgreSQL使用分号;作为分隔符。在控制台psql中,您可以使用\g
postgres=# select 10 as a
postgres-# \g
+----+
| a |
+----+
| 10 |
+----+
(1 row)
Run Code Online (Sandbox Code Playgroud)
但它并不经常使用。有时人们使用\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 $$;
Run Code Online (Sandbox Code Playgroud)
或更简单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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6961 次 |
| 最近记录: |