2017-06-14 8 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 

このクエリは、この

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

「InsertDetails」のように見える呼び出すASP.NETのC#コードは、「ページング範囲です終了」「スタート」上記のクエリの名前です。

私の質問はです。このクエリのパラメータの前に "#*"が付いている機能や目的は何ですか?このクエリを他のテーブルに複製する必要がありますが、この "#* $ f0"、 "#* $ f1"、 "#* $ f2"、 "#* $ f3"のようにパラメータが渡される理由を知りたいのですが。

+2

これらはT-SQLの列名や変数名の正式な形式ではありません(もちろん、大括弧で囲まれていない限り)。また、SqlDataSourceは特別な処理をしません。このクエリテキストはどうやって取得していますか? –

+1

時にはそのような奇妙な文字が、コールの前に文字列レベルで置き換えられるプレースホルダとして使用されることがあります(ダイナミックコマンド生成のようなもの)...美しいものでも清潔でないものもありますが、時には - あなたも知っています... acutally処理されたステートメントを監視します – Shnugo

+0

標準の 'SqlDataSource'クラスには私が見ることができる' ExecuteSql'メソッドはありません。あなたはカスタム 'SqlDataSource'クラス、カスタム' ExecuteSql'拡張メソッドを使用していますか、まったく見落としましたか? – hvd

答えて

1

私は答えとして私のコメントを入れるように頼んだ。 、時にはこのような奇妙な文字が を呼び出し(dynamicコマンドの種類 世代)...美しいもきれいどちらも前に文字列レベルで交換されるプレースホルダとして

使用されています。私が正しい推測していたようです時には - も - あなたが知っている...

あなたはコーディングacutally

がハッピーに処理され 文を監視するためにプロファイラを使用する場合があります!

関連する問題