2016-04-16 19 views
3

私は、SCCM 2012によってインストールされたパッケージに関する情報を抽出するための斬新な手段を完成させるために、インベントリされた「プログラムと機能」最後の部分は、前述のプロセスでインベントリされたレジストリ文字列からPACKAGEIDを抽出しています。 HKEY_LOCAL_MACHINE \ソフトウェア\マイクロソフト\ SMS \ Mobileクライアントの\ソフトウェア配布\実行履歴\システム\ LAB00003 \ ac80c725-7dc7-11e5-9bc8-:各文字列は、この(ターゲット "のPackageIDは" 太字で識別されるようになります。 000c292d4525長いRegKeyパスを8文字にする必要がある - LEFTまたはSUBSTRINGに無効な長さのパラメータが渡される

述べたように、私はこの任意の背後にある天才ではないが、私は私が次のエラー取得しています理由を理解したかった:渡された

メッセージ537、レベル16、状態3、行1 無効な長さのパラメータをLEFTまたはSUBSTRING機能に移動します。

From次のクエリ:

SELECT DataType0、 KeyPath0、 NAME0、 Value0、 ( SELECT SUBSTRING(KeyPath0、LEN(LEFT(KeyPath0、CHARINDEX( '\システム\'、KeyPath0)))+ 1、 1) ) - LEN(KeyPath0、LEN(KeyPath0) - CHARINDEX( '\'、KeyPath0)))私はdbo.v_GS_Registry_Values0ビューが実際にないことを確認しdbo.v_GS_Registry_Values0

FROM "パッケージID" としてSCCM_Ext.vex_GS_Registry_Values0からselect *を使ってregキーストリングを持っていますが、たくさんの検索にもかかわらず、私の単純なSQLマインドはクエリとLEN & CHARINDEXを使用することができません。

私はこのサイトの慈悲に完全に挑戦しています。なぜなら、これに対する解決策だけでなく、なぜこれが起こっているのか、またどのようにクエリが機能するのかをよりよく理解することができるということです。

追加情報がある場合は、私に教えてください。あなたはちょうどあなたがSQLは非常に複雑ですね\System\後に次の文字列を取得しようとしている場合は

+0

これは、最も外側の部分文字列に渡す2番目のパラメータが-76(150 - 96 - 131 - 1) –

答えて

1

、あなたはこれでちょうどそれを行うことができます。

SELECT left (Y.S, charindex ('\', Y.S) - 1) 
from Table1 
outer apply (
select CHARINDEX ('\System\', KeyPath0) as pos 
) X 
outer apply (
select substring (KeyPath0, X.pos + 8, 9999) as S 
) Y 

SQL Fiddle

第一の外側にapplyは\System\を見つけ、2番目の文字列は残りの文字列を取得します(最大パスは9999文字と仮定します)。次に実際の選択で次の\の前に取ります。

+0

であるためです。完全に働いた!百万人、ありがとうございました! – surferstylee

関連する問題