在MS SQL Server中,您可以声明任何基本类型或表类型的局部变量。此表是一个普通表,您可以像其他任何表一样运行SELECT
,INSERT
,UPDATE
和DELETE
,但它是一个局部变量,而不是数据库本身的一部分。
我正在尝试在Firebird中做同样的事情,但它似乎不喜欢语法。
declare variable value int; --works fine
declare variable values table (value int); --Error: "Token unknown (table)"
有没有办法做到这一点? (并且在任何人说“使用可选的存储过程”之前,这是行不通的。我需要能够动态运行INSERT
和SELECT
的东西。)
答案 0 :(得分:13)
Firebird不像SQL Server那样支持表变量。
您可以随意使用Global Temporary Tables(需要Firebird 2.1或更高版本)
(v.2.1)全局临时表(GTT)是存储在具有永久元数据但具有临时数据的系统目录中的表。来自不同连接(或事务,取决于范围)的数据彼此隔离,但GTT的元数据在所有连接和事务之间共享。
GTT有两种:
数据在引用指定GTT的连接的生命周期内持续存在;和
数据仅在引用事务的生命周期内持续存在。
您必须事先创建GTT。
CREATE GLOBAL TEMPORARY TABLE
...
[ON COMMIT <DELETE | PRESERVE> ROWS]