2016-03-21 6 views
1

vb.netのSQLスクリプトにXMLドキュメントをパラメータとして渡すにはどうすればよいですか? XMLをSQLスクリプトの変数として使用したいと思います。 SQLスクリプトは、変数iをパラメータ・サブミッターとして認識しません。XMLドキュメントを.netのSQLスクリプトのパラメータとして渡す。

これは私のXMLです。

<?xml version="1.0"?> 
<sqlSkript> 
    <parameter> 
     <name>name</name> 
     <datentyp>varchar</datentyp> 
    </parameter> 
    <parameter> 
     <name>strasse</name> 
     <datentyp>varchar</datentyp> 
    </parameter> 
</sqlSkript> 

これは私のSQLスクリプトです。

DECLARE @xml xml 

SET @xml = @test 

SELECT t.name AS table_name, 
     SCHEMA_NAME(t.schema_id) AS schema_name, 
     c.name AS column_name, 
     st.name as datatyp 

FROM sys.tables AS t 
     INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
     INNER JOIN sys.types st ON st.system_type_id = c.system_type_id 
     AND st.name != 'sysname' 

WHERE (c.name like '%' + (SELECT @xml.value('(/sqlSkript/parameter/name)[1]', 'varchar(100)')) + '%' 
     AND st.name like (SELECT @xml.value('(/sqlSkript/parameter/datentyp)[1]', 'varchar(100)'))) 
     or 
     (c.name like '%' + (SELECT @xml.value('(/sqlSkript/parameter/name)[2]', 'varchar(100)')) + '%' 
     AND st.name like (SELECT @xml.value('(/sqlSkript/parameter/datentyp)[2]', 'varchar(100)'))) 

ORDER BY schema_name, table_name; 

これは私vb.netコードです

 Dim command As SqlCommand = New SqlCommand() 

     Dim xmldoc As New Xml.XmlDocument 
     xmldoc.Load(System.IO.Path.GetFullPath(Application.StartupPath & "\XML\indivudellParameter.xml")) 

     Dim param As SqlParameter = New SqlParameter("@test", SqlDbType.Xml) 
     param.Value = New SqlXml(New XmlTextReader(xmldoc.InnerXml, XmlNodeType.Document, Nothing)) 
     command.Parameters.Add(param) 

     Using reader As SqlDataReader = _server.ConnectionContext.ExecuteReader(script, command) 
      While reader.Read() 
       //do something 
      End While 
      reader.Close() 
     End Using 

EDIT:

がしたいあなたは確認しています:

回避策

 Dim xmldoc As New Xml.XmlDocument 
     xmldoc.Load(System.IO.Path.GetFullPath(Application.StartupPath & "\XML\indivudellParameter.xml")) 

     script = script.Replace("@test", xmldoc.InnerXml) 

     Using reader As SqlDataReader = _server.ConnectionContext.ExecuteReader(script) 
      While reader.Read() 
        // do something 
      End While 
+0

RDBMS(製品およびバージョン) – Shnugo

+0

私は。? MS SQL Server 2008 R2を使用する – battleboimatze

+0

この場合、SQLプロファイラを起動してSQL Serverが取得するコマンドを確認する必要があります。 – Shnugo

答えて

0

は非常に単純なことかもしれませんあなたのXMLデータ値を比較するどちらの場合もst.nameに対して(sとマークされている場所は***です)?

WHERE (c.name like '%' + (SELECT @xml.value('(/sqlSkript/parameter/name)[1]', 'varchar(100)')) + '%' 
     AND ***st.name*** like (SELECT @xml.value('(/sqlSkript/parameter/datentyp)[1]', 'varchar(100)'))) 
     or 
     (c.name like '%' + (SELECT @xml.value('(/sqlSkript/parameter/name)[2]', 'varchar(100)')) + '%' 
     AND ***st.name*** like (SELECT @xml.value('(/sqlSkript/parameter/datentyp)[2]', 'varchar(100)'))) 

それは単純ではない場合:お使いのパラメータが正しくSQLスクリプトに来れば、いくつかの一時テーブルにそれを書いて、そこにそれを確認(チェックしてみ

+0

異なる値を比較するので、はい。 – battleboimatze

+0

詳細情報を入力してください:あなたの実際のデータはどのようなものですか? '@ test'をXMLに設定してSSMSで実行すると、スクリプトは正しく動作しますか?どのコマンドがプロファイラでSQL Serverに入るのか確認しましたか?とにかく:SQL ServerのインラインTVFが、パラメータとしてXMLを受け取り、結果セットを返すようになりました。 – Shnugo

+0

データベースを分析して特定の列が存在するかどうかをチェックするスクリプトを使用します。 xmlには自分の検索パラメータが含まれています。 – battleboimatze

関連する問題