簡體   English   中英

在SQL Server 2008中使用動態SQL生成臨時表

[英]Build temporary table with dynamic sql in SQL Server 2008

使長話短說...

我正在構建一個Web應用程序,用戶可以在其中選擇約40個參數的任意組合。 但是,對於他們想要的結果之一(投資經驗),我必須從不同的表中提取信息,並比較六個不同列(股票exp,共同基金exp等)中的值,並且僅返回六個中的最高值該特定記錄。

這不是問題。 問題在於,在運行時,我用於查找投資exp的查詢不一定知道帳戶ID。 考慮到表掃描將帶來超過五百萬的客戶,這不是一個選擇。 所以我想做的是編輯我主要的動態構建查詢的副本,但是與其返回30+列,不如返回2,accountid和experienceid(這是Experience表的PK),所以我可以做過濾交易。

你們中有些人可能定義的動態SQL與我自己有所不同。 我的查詢是一個字符串,根據發送到我的過程的參數,where子句的某些部分將通過開關打開或關閉。 最后,我執行完畢,這一切都在服務器端完成,Web應用程序要做的就是向我的proc發送一個參數數組。

我過度簡化的代碼本質上是這樣的:

declare @sql varchar(8000)
set @sql = 
'select [columns]
into #tempTable
from [table]
[table joins]' + @dynamicallyBuiltWhereClause

exec(@sql)

在這部分之后,我嘗試使用#tempTable進行投資經驗篩選過程,但是我收到一條錯誤消息,告訴我#tempTable不存在。

任何和所有的幫助將不勝感激。

問題是臨時表的范圍僅存在於exec()語句中。 您可以使用2個哈希符號-> ## tempTable將臨時表轉換為“全局”臨時表。 但是,我不知道為什么要使用變量@dynamicallyBuiltWhereClause生成SQL語句。

我已經做了過去的工作,但是從應用程序生成SQL方面取得了更好的成功(使用C#生成我的SQL)。

另外,您可能需要查看表變量。 我已經看到了一些使用臨時表的奇怪實例,其中應用程序重新使用了連接,而最后一個查詢的臨時表仍然存在。

暫無
暫無

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

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