将表类型输入参数传递给SSIS中执行SQL任务中的存储过程

时间:2016-05-13 14:01:39

标签: sql-server ssis

我正在尝试从SSIS中的执行SQL任务调用存储过程。存储过程接受两个表类型变量,我在另一个执行SQL任务中构造并存储在变量的对象类型中。 由于我需要传递对象类型的变量,我使用的是ADO.NET连接管理器。 既然我使用ADO.NET连接管理器,我也无法传递输入参数?在直接输入中标记,我需要编写表达式。 但表达式不支持对象类型变量。 出路是什么?

由于

1 个答案:

答案 0 :(得分:0)

您将无法使用本机ADO / OLE源组件。您必须使用脚本组件作为源并使用.NET创建

我的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);
}