Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在Firebird中定义存储过程的表类型输入参数?_C#_Sql_Firebird - Fatal编程技术网

C# 是否可以在Firebird中定义存储过程的表类型输入参数?

C# 是否可以在Firebird中定义存储过程的表类型输入参数?,c#,sql,firebird,C#,Sql,Firebird,我需要用表类型的输入参数定义存储过程,所以,例如,如果我从C调用存储过程并将datatable作为参数传递给存储过程,将自动映射到列和字段 我读过关于创建全局临时表的内容,但是如何在Firebird中用作输入参数呢?我不知道这是否可能。Firebird存储过程只接受标量值,因此无法传递表类型输入参数。解决方法是将GTT定义为存储过程的伙伴,并在调用存储过程之前填充该全局临时表。然后,存储过程从全局临时表中读取数据 需要明确的是,全局临时表是您创建一次的持久性定义,然后所有连接和用户都可以重用它们

我需要用表类型的输入参数定义存储过程,所以,例如,如果我从C调用存储过程并将datatable作为参数传递给存储过程,将自动映射到列和字段


我读过关于创建全局临时表的内容,但是如何在Firebird中用作输入参数呢?我不知道这是否可能。

Firebird存储过程只接受标量值,因此无法传递表类型输入参数。解决方法是将GTT定义为存储过程的伙伴,并在调用存储过程之前填充该全局临时表。然后,存储过程从全局临时表中读取数据

需要明确的是,全局临时表是您创建一次的持久性定义,然后所有连接和用户都可以重用它们(假设用户已获得正确的权限),而GTT中的数据仅对提交-删除行上的当前事务可见;默认值或提交时的当前连接保留行。它们不像SQL Server中的本地临时表

换句话说,这种类型的临时表的定义是全局的和持久的,但是数据是特定于事务或连接的

因此,您要做的是定义一个全局临时表:

创建全局临时表输入\ sp\示例 col1整数, col2 varchar100 在提交时删除行 以及一个示例存储过程

创建过程sp_示例 返回result1整数,result2 varchar8192 像 声明col1_值为整数; 声明col2_值varchar100; 开始 对于select col1,col2从input_sp_示例顺序按col1,col2到col1_值,col2_值do 开始 如果col1_值与result1不同,则 开始 结果1=col1_值; 结果2=col2_值; 终止 其他的 开始 结果2=结果2 | | col2|U值; 终止 悬 终止 终止 你可以这样称呼它:

在输入_sp_示例col1中插入col2值1,'a'; 在输入_sp_示例col1中插入col2值1,'b'; 在输入_sp_示例col1中插入col2值1,'c'; 在输入_sp_示例col1中插入col2值2,‘a’; 从sp_示例中选择*; 此基本示例将产生以下结果:

结果1 结果2 1. A. 1. ab 1. abc 2. A.