2016-05-13 1 views
0

SSISでSQL実行タスクからストアドプロシージャを呼び出そうとしています。ストアドプロシージャは、別のExecute SQL Taskで構築している変数のオブジェクト型に格納している2つのテーブル型変数を受け入れます。 オブジェクト型の変数を渡す必要があるので、私はADO.NET接続マネージャを使用しています。 また、ADO.NET接続マネージャを使用しているため、入力パラメータを渡すことができません。マークを直接入力する必要があり、表現を書く必要があります。 しかし、式はオブジェクト型変数をサポートしていません。 退出は何ですか?テーブルタイプの入力パラメータをSSISのSQL実行タスクのストアドプロシージャに渡す

ありがとうございました

答えて

0

ネイティブADO/OLEソースコンポーネントを使用することはできません。あなたは、ソースとして機能するスクリプトコンポーネントを使用してbillinkc私SQL TVP post

string connectionString = @"Data Source=localhost;Initial Catalog=master;Integrated Security=True"; 
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connectionString); 
System.Data.DataTable dataTable = null; 

// note that my data table does not have to be the same 
// as my UDTT, nor do my columns have to have the same name 
// Types-yes. Ordinal, probably so 
dataTable = new System.Data.DataTable("Sample"); 
dataTable.Columns.Add("tweep", System.Type.GetType("System.String")); 
dataTable.Columns.Add("have_met", System.Type.GetType("System.Boolean")); 

// add rows to my data table but really, this could be any source 
dataTable.Rows.Add(new object[] { "billinkc", true }); 
dataTable.Rows.Add(new object[] { "BrentO", true }); 
dataTable.Rows.Add(new object[] { "buckwoody", false }); 

// Hooray for #sqlsat35 and meeting Jen & Sean 
dataTable.Rows.Add(new object[] { "MidnightDBA", true }); 

System.Data.SqlClient.SqlConnection connection = null; 
System.Data.DataSet results = null; 
System.Data.SqlClient.SqlCommand command = null; 
System.Data.SqlClient.SqlDataReader dataReader = null; 
connection = new System.Data.SqlClient.SqlConnection(connectionString); 
try 
{ 
    connection.Open(); 
    command = new System.Data.SqlClient.SqlCommand("TwitterAdd"); 
    command.CommandType = System.Data.CommandType.StoredProcedure; 
    command.Connection = connection; 

    // Assigning a table valued parameter looks much like any other parameter 
    System.Data.SqlClient.SqlParameter tvp = command.Parameters.AddWithValue("@tvp", dataTable); 

    // this is the only special sauce (not required but helpful) 
    tvp.SqlDbType = System.Data.SqlDbType.Structured; 
    tvp.TypeName = "dbo.CONTRIVED_EXAMPLE"; 

    dataReader = command.ExecuteReader(); 

    if (dataReader.HasRows) 
    { 
     // pseudo logic here 
     while(dataReader.Read()) 
     { 
      MyBuffer.AddRow(); 
      MyBuffer.Col1 = dataReader["Col1"].ToString(); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex); 
} 
+0

おかげから

関連ビットを作成するために、.NETを使用する必要があります。私はADO.NET接続マネージャに接続してSQLタスクを実行する際にオブジェクト変数を準備しています。しかし、私がスクリプトタスクの読み込み専用変数を読み込んでいるときに、データセットのテーブルが空であると表示されます。私はSSMSで同じものを実行すると、テーブル型変数のデータを見ることができます。私は、データセットの変数を読み込み、最初のテーブルを使ってSPに渡しています。なぜオブジェクトがnullになるのかわかりません。 –

+0

実行sqlタスクは、ブレークポイントを設定してデータを見ることができないため、オブジェクト変数にデータを設定できないようです。これは、結合された2つのテーブルからいくつかの行をフェッチするselectステートメントです。問題が何であるか分かりません。結果セットを完全な結果セットに設定しました。単一行に変更すると、「単一行結果タイプの結果列に値を設定できません。クエリで空の結果セットが返されました。」 –

+0

複数のコメントを追加して申し訳ありません。私はそれが働くように近づいているように追加しています。今私は奇妙な問題に直面しています。私は実行SQLタスクでDBからのリンク(https://abcd/xyz/ijk.aspx)を格納している変数を持っています。今私は別の実行SQLタスクでオブジェクト変数を作成する際に使用していますが、「https:の近くに不正な構文があります」というエラーが発生しています。私はこれがエスケープシーケンスと何か関係があるか、特別な処理が必要であるとは確信していません。 –

関連する問題