あらゆるかなりの時間のためにSQLサーバーを使用すれば、多分価値のその配列に基づいて機能かプロシージャおよびハンドルデータに価値の配列を渡すことは非常に有用である状態に出会う。
SQLサーバー2008年では、変数としてテーブルを渡すことができる。 SQLサーバー2005年では、天然XMLのデータタイプを使用してそのような方法で価値のまわりで。渡ることができるか。か。OPENXMLを使用し、あなたがSQLサーバー2005年でそれを使用する方法と同じようなXMLデータを使用することによってSQLサーバー2000年のそれを達成できる。
DBAs SQLサーバー2000年を使用して多くのかSQLサーバー2005はまだ価値ではない(および誰もの配列をSQLサーバー2008年をけれども使用している)得る非常に快適なXML分析データ。 私は私がSQLサーバー2000年でデータ・セットに文字列型の値の配列を変えるためにおよびあとで使用するアプローチを示す。
いつこのアプローチを使用するか
私は変数を渡すことのこのアプローチの巨大なファンではない。 私はSQLサーバーがそのような状態を扱うための多くにより十分な天然構造物を備えていることに感じる。 但し、私は何百ものさまざまなSQLサーバーフォーラムのこのシナリオに関する質問の文字通り守備についた、従ってそれはデータの配列を渡すことへ総称的に使用可能なアプローチである。
配列リスト
私の例のための、配列リストは共通区切りで分かれている価値の一連である。 これ例のための有効な配列リスト:
宣言しなさい@ARRAYLIST VARCHAR (MAX)を 置きなさい@ArrayListを= 「ティムのzach、クリスのwendi、貝折れ釘」
目的は価値のその一連を取り、価値すべてがデータの同じ列で行われるようにそれらをちょうつがい式に回転することである; それから別のテーブル、等にデータを結合できる。 これをするためには、私はテーブル評価された機能にこのリストを渡し、機能は私のためのピボット仕事を大事にする筈だ。 次に私のピボット機能にコードがある:
機能[dbo] .udf_PivotParametersを変えなさい ( " @PARAMATERLIST VARCHAR (MAX)、 " @Delimiterの木炭(1) ) @RETURNLISTのテーブルを戻す ( " FieldValue VARCHAR (MAX) ) 始まるように " @ARRAYLISTのテーブルを宣言しなさい " ( ''''か。か。 FieldValue VARCHAR (MAX) ") "宣言しなさい@VALUE VARCHAR (MAX)を " @CURRENTPOSITION INTを宣言しなさい か。か。 "置きなさい@PARAMATERLIST = LTRIM (RTRIM (@PARAMATERLIST))を "置きなさい@CURRENTPOSITION = ISNULL (CHARINDEX (@DELIMITER、@PARAMATERLIST、1)、0)を
か。か。@CurrentPositionなら= 0 「か。@ArrayList (FieldValue)への挿入物 「か。@ParamaterListを選びなさい か。か。他に か。か。始めなさい 「か。@CurrentPosition > 0間 「か。始めなさい " @VALUE = LTRIM (RTRIMを置きなさい(去った(@PARAMATERLIST、@CURRENTPOSITION - 1))) --価値が区切りの間にあることを確かめなさい " Len (@ParamaterList) > 0および@CurrentPosition<LEN (@ParamaterList) "始めなさい "か。か。@ArrayList (FieldValue)への挿入物 "か。か。@Valueを選びなさい "端 "置きなさい@PARAMATERLIST =サブストリング(@PARAMATERLIST、@CURRENTPOSITION + LEN (@DELIMITER)、LEN (@PARAMATERLIST))を " @CURRENTPOSITION = CHARINDEX (@DELIMITER、@PARAMATERLIST、1)を置きなさい 「か。端 か。か。端 「か。挿入物か。か。 @ReturnList (FieldValue) 「か。選びなさいか。か。 FieldValue 「か。" @ArrayListから "リターン 端か。か。 行きなさい
機能は区切る特性と共にリストを分けるために価値のリストを、受け入れる。 それから機能は機能から出力として結局戻るテーブルの変数に区切る特性の間のすべてを挿入する配列リストを通って輪になる。 これがテーブル評価された機能であるので、選り抜き声明から価値を戻す必要がある。 いかにかこのコード断片ショー:
宣言しなさい@ARRAYLIST VARCHAR (MAX)を 置きなさい@ArrayListを= 「ティムのzach、クリスのwendi、貝折れ釘」
選びなさいから… * dbo.udf_PivotParameters (@ArrayList、「」、)
性能
私は性能が徹底的にリストの増加の価値として低下する筈だのでもし可能ならこのアプローチを控え目に使用することを提案する。
ティムの行商人ルーイスビルの銀行に勤めているSQLのサーバデータベースの管理者およびコンサルタント、KY。 ティムに8年間以上のそれ経験あり、彼はマイクロソフトによって証明されるデータベースの開発者および管理者である。 ティムに連絡することを望んだら電子メールchapman.tim@gmail.comの彼。
