T-SQL如何区分过程代码和“纯SQL”?

时间:2018-06-14 18:50:07

标签: sql-server tsql

回复https://stackoverflow.com/a/50859647/156458

  

没有明确区分过程代码和“纯SQL”的唯一DBMS产品是SQL Server:T-SQL是SQL语言的扩展,允许您混合“常规SQL“和过程SQL,而不告诉后端代码需要运行不同的引擎(这对于从SQL Server迁移到Postgres或Oracle 的人来说是一个很好的混淆的来源)。

我想知道T-SQL如何区分程序代码和“普通SQL”?

这对PostgreSQL用户造成了怎样的混淆?

感谢。

1 个答案:

答案 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),因为他们声称“这样的数据库无法使用