2017-06-14 29 views
0

我有以下查詢從ASP.NET應用程序中調用,並創建同一個表「DETAILS」中的行的子集,該子集由用於分頁目的的參數$ f2和$ f3定義。參數傳遞給查詢之前,「#*」散列和星形符號的用途是什麼?

INSERT INTO DETAILS (ID, UIN, ACTIVE_IND, UGUID, CREATED_BY, CREATED_DATE) 
SELECT AF.ID, AF.UIN, AF.ACTIVE, AF.UGUID, AF.CREATED_BY, AF.CREATED_DATE FROM 
(SELECT #*$f0 ID, DET.UIN, DET.ACTIVE_IND, DET.UGUID, DET.CREATED_BY, DET.CREATED_DATE, 
     DENSE_RANK() OVER (ORDER BY P.PRODUCT_ID) FG 
     FROM DETAILS DET 
     JOIN PRODUCTS P ON P.UIN = DET.UIN 
     WHERE ID = #*$f1) AF 
    WHERE AF.FG BETWEEN #*$f2 AND #*$f3 

調用此查詢的ASP.NET C#代碼看起來像這樣

new SqlDataSource().ExecuteSql("InsertDetails", 
       new List<object>() {_subSetId, _mainSetId, start, end}); 

「InsertDetails」是上面查詢的名稱和「開始」,「結束」是尋呼範圍。

我的問題是:這個查詢中的參數之前的「#*」是什麼函數或目的?我需要複製這個查詢其他表,但想知道爲什麼參數通過像這樣「#* $ f0」,「#* $ f1」,「#* $ f2」和「#* $ f3」。

+2

這些不是T-SQL中列或變量名稱的合法形式(當然,除非用方括號轉義),SqlDataSource也沒有對此做任何特殊處理(我可以找到)。你如何得到這個查詢文本? –

+1

有時候,這種奇怪的字符被用作在調用之前在字符串級別上替換的佔位符(動態命令生成的種類)......既不美觀也不乾淨,但有時 - 很好 - 您知道......您可以使用分析器來監視被處理的語句 – Shnugo

+0

標準'SqlDataSource'類沒有任何'ExecuteSql'方法,我可以看到。你是使用自定義的'SqlDataSource'類,一個自定義的'ExecuteSql'擴展方法,還是我完全忽略了一些東西? – hvd

回答

1

你讓我把我的評論作爲答案。看來,我有正確的猜測:

有時候,這些奇怪的字符被用作佔位這是 更換了串級呼叫(一種動態指令 代)...既不美麗也不乾淨前,但有時 - 好 - 你知道......

您可以使用Profiler來監控其 是實際上可以處理

編碼快樂的聲明!