簡體   English   中英

如何在存儲過程外調用表變量

[英]How to call table variables outside stored procedure

我想在存儲過程的范圍之外訪問它定義的表變量。 我已經嘗試過了 ,但是我的情況有所不同,因為我的過程接收到一個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調用。

您不能使用表變量來執行此操作。 您可以使用臨時表來執行此操作,但是表變量會自動超出范圍,並且在創建它們的過程之外無法訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM