【问题标题】:How to call table variables outside stored procedure如何在存储过程之外调用表变量
【发布时间】:2019-09-05 20:18:41
【问题描述】:

我想在存储过程范围之外访问它定义的表变量。 I have tried this one,但我的情况不同,因为我的过程接收一个varchar 作为参数,然后它创建一个执行的varchar,某种程度上是这样的:

create procedure p_x
    @Table varchar(250)
as
begin
    declare @Sql varchar(450)

    select @sql = 'declare ' + @Table + 'table(col1 varchar(10), col2 float, col3 float, col4 float)'
    select @sql = @sql + ' insert' +  @Table + ' values('a', 1,1,1)'
    select @sql = @sql + ' insert' +  @Table + ' values('b', 2,2,2)'
    select @sql = @sql + ' select * from'

    execute(@sql) 
end
go

另一个问题的解决方案是将要处理的新表作为参数传递。但在我的情况下,因为代码是写在varchar 连接内的决定性部分(并且它还在varchar @Table 的末尾创建连接的辅助表),所以我不知道该怎么做。

给出一些上下文:这个过程使用全局临时表,在查询中被调用。一切正常,直到我们需要更改查询以将其转换为表值函数。查询只是通过全局范围访问过程中定义的表,但表值函数不允许访问这些全局临时表。表变量好像不能是全局的。

简而言之,要将查询更改为表值函数,我需要将过程的临时表更改为可以在表值函数内部访问的表变量。

全局: 1) 今天我有一个有效的查询,这个查询调用了一个过程。

2) 我希望能够从 API 调用此查询,而无需粘贴 100 行查询

3) 我收到了将查询转换为 TFV 的建议

4)我做到了,但是不行,因为TFV不能使用临时表

5) 我想要一种解决方法来创建过程的副本,其中包含一些可以从 TVF 调用的细微更改。

【问题讨论】:

  • 这对我来说没有意义,你需要发布一个你的函数的例子来说明你试图描述的内容(用词来解释代码是一个糟糕的选择)。
  • 过程和查询都在100行以上。您需要知道的是,它不是将表作为参数传递,而是将 varchar 与表名一起传递,然后在过程中创建它。
  • 所以使用表变量是不可能的
  • 为什么您认为需要使用表变量才能将过程转换为 TVF?
  • @TabAlleman 我不想将程序转换为 TVF。我正在尝试将调用过程的查询转换为 TVF。

标签: sql sql-server


【解决方案1】:

您不能对表变量执行此操作。您可以使用临时表来完成此操作,但表变量会自动超出范围,并且在创建它们的过程之外无法访问。

【讨论】:

  • 我正在解决的正是该过程在其中创建临时表的问题,这些临时表无法从我试图将查询转换为的表值函数访问。
  • @MatheusPopstdeCampos 这就是您需要提供更多信息的原因,因为那没有意义。您是否在同一连接中调用该函数?还是从一个新的? Cos 临时表仅在单个连接上有效。
  • 我想摆脱临时表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 2015-12-10
  • 2018-12-07
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多