回复https://stackoverflow.com/a/50859647/156458
没有明确区分过程代码和“纯SQL”的唯一DBMS产品是SQL Server:T-SQL是SQL语言的扩展,允许您混合“常规SQL“和过程SQL,而不告诉后端代码需要运行不同的引擎(这对于从SQL Server迁移到Postgres或Oracle 的人来说是一个很好的混淆的来源)。
我想知道T-SQL如何区分程序代码和“普通SQL”?
这对PostgreSQL用户造成了怎样的混淆?
感谢。
答案 0 :(得分:2)
我指的是在SQL Server中你可以写:
declare @some_variable
if exists (select ..) then
... do something
else
... do something else
end
... do more ..
无需“正式”启动Postgres(使用DO
)或Oracle(使用DECLARE
)所需的过程代码块。变量也可用于该代码(再次不同于Oracle和Postgres,其中变量仅可用于程序块)
也允许该代码运行SELECT语句,而无需将结果存储在某处(如Postgres,Oracle,DB2和许多其他DBMS中那样)
我也从未说过(分离)让Postgres(或Oracle)用户感到困惑。
我写道“它将用户迁移 从 SQL Server 混淆到 Postgres(或Oracle”)。
对于有经验的SQL Server用户来说,SQL和过程语言(PL / pgSQL或PL / SQL)之间的明确区分(有时甚至令人讨厌)至少令人惊讶,如果不是完全令人反感的话。我看到人们对此非常生气(不是说p * off),因为他们声称“这样的数据库无法使用”