6

在 MS SQL Server 中,您可以声明任何原始类型或表类型的局部变量。该表是一个普通表,您可以运行SELECTINSERTUPDATEDELETE,就像任何其他表一样,除了它是一个局部变量,而不是数据库本身的一部分。

我试图在 Firebird 中做同样的事情,但它似乎不喜欢这种语法。

declare variable value int; --works fine
declare variable values table (value int); --Error: "Token unknown (table)"

有没有办法做到这一点?(在有人说“使用可选择的存储过程”之前,这是行不通的。我需要一些可以动态运行的INSERT东西SELECT。)

4

1 回答 1

14

Firebird 不像 SQL Server 那样支持表变量。

您可以使用的最接近的东西是全局临时表(需要 Firebird 2.1 或更高版本)

(v.2.1) 全局临时表 (GTT) 是存储在系统目录中的具有永久元数据但具有临时数据的表。来自不同连接(或事务,取决于范围)的数据相互隔离,但 GTT 的元数据在所有连接和事务之间共享。

GTT有两种:

具有在引用指定 GTT 的连接生命周期内持续存在的数据;和

仅在引用事务的生命周期内持续存在的数据。

您必须事先创建 GTT。

CREATE GLOBAL TEMPORARY TABLE
  ...
  [ON COMMIT <DELETE | PRESERVE> ROWS]
于 2012-12-09T19:12:59.540 回答