簡體   English   中英

在動態SQL中創建動態表並在動態SQL外部引用它

[英]Create a dynamic table in dynamic SQL and reference it outside of dynamic SQL

請參見下面的代碼:

select top 1 * into #dbusers from dbusers

declare @tsql as varchar(1000)
set @tsql = 'select * from #dbusers'
exec (@tsql)

這按我期望的那樣工作,即動態SQL返回一行。 是否有可能做到這一點:

declare @tsql as varchar(1000)
set @tsql = 'select top 1 * into #dbusers from dbusers'
exec (@tsql)

select * from #dbusers

在這里我得到錯誤:

無效的對象名稱“ #dbusers”

有解決方法嗎?

我意識到您可以通過動態SQL獲得輸出參數。 但是,我也知道使用存儲過程時,不能將表作為輸出參數返回。

是否有可能做到這一點? 是否有解決方法(除了創建物理表之外)?

臨時表僅在創建它們的會話中可用。 使用Dynamic SQL,這意味着在運行Dynamic SQL后將不可用。 您在這里的選擇是:

  1. 創建一個全局臨時表,該表將一直保留在會話外部,直到使用雙哈希將其顯式刪除或以其他方式從TempDB中清除出來為止: create table ##GlobalTemp
    由於此表在會話外仍然存在,因此您需要確保不要創建其中的兩個,也不要嘗試使用兩個不同的進程來處理其中的數據。 您需要一種方法來唯一地標識要處理的全局臨時表。
  2. 您可以創建一個常規表,並記住之后再將其刪除。
  3. 在Dynamic SQL腳本中包括需要引用臨時表的任何邏輯

但是,對於您的特定實例,最好只執行一次select into ,該select into將根據所選數據生成表結構。

暫無
暫無

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

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