У меня есть две таблицы в моей базе данных, одна из которых называется Sales.Salesperson, которая является источником, а целевая база данных - dbo.Salesperson. Я создал BIML, который использует код C#, чтобы получить список существующих таблиц из источника, а затем импортировать все данные из источника в целевую. В моем примере у меня есть только одна таблица, которую я выше перечисл. На C# я использую SQL-соединение и команду SQL, чтобы получить таблицу и схему всех таблиц (снова только 1, чтобы она могла быть динамической),BIML и C# SQL-соединение и команда на вопрос SSIS
ПРОБЛЕМА, поскольку у меня есть период, схема sepearte и table, в моей команде SQL, когда я перехожу из BIML в Generate SSIS-пакет, он дает мне сообщение об ошибке с шага SSIS EXECUTESQL DirectInput, когда я пытаюсь обрезать таблицу < # = таблица #> ошибка говорит: «Sales.SalesPerson в пакете DynamicDataLoad включает недопустимые символы (/:[].=) для SSIS недопустимые символы будут заменены with_»И из-за этого, я получаю сообщение об ошибке на моем пакете SSIS
Вот ниже код, чтобы помочь:.
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="DynamicDataLoad" ConstraintMode ="Linear" ProtectionLevel="DontSaveSensitive">
<Tasks>
<# foreach(var table in GetTables()) { #>
<ExecuteSQL Name="Truncate Table Dest <#=table#>" ConnectionName="Target">
**<DirectInput>Truncate Table <#=table#></DirectInput>
</ExecuteSQL>**
<Dataflow Name="Load Table <#=table#>" >
<Transformations>
<OleDbSource Name="Source Table" ConnectionName="Source">
<ExternalTableInput Table="<#=table#>" />
</OleDbSource>
<OleDbDestination Name="Destination Table" ConnectionName="Target">
<ExternalTableOutput Table="<#=table#>" />
</OleDbDestination>
</Transformations>
</Dataflow>
<# } #>
</Tasks>
</Package>
</Packages>
</Biml>
:
и ниже - часть C#, если вы посмотрите на команду SQL, я возвращаю Schema, а затем таблицу в список, называемый «table», который используется в приведенном выше BIML, чтобы перечислить все таблицы, которые будут преобразованы в пакет SSIS, это используется в части BIML, называемой усечением, в которой ошибка возникает из BIML.
<#+
List<string> GetTables() {
List<string> tables = new List<string>();
SqlConnection cn = new SqlConnection("Data Source=mdsdqsdev;Initial Catalog=Test;Persist Security Info=False;Integrated Security=SSPI;");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
string q = "Select TABLE_SCHEMA+'.'+TABLE_NAME as name from INFORMATION_SCHEMA.TABLES";
var cmd = new SqlCommand(q);
cmd.Connection = cn;
try
{
da.SelectCommand = cmd;
ds.Tables.Add(new DataTable("Results"));
if(cn.State != ConnectionState.Open)
{
cn.Open();
}
ds.Tables[0].BeginLoadData();
da.Fill(ds,"Results");
ds.Tables[0].EndLoadData();
dt = ds.Tables[0];
if(cn.State != ConnectionState.Closed)
{
cn.Close();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (cn.State != ConnectionState.Closed)
{
cn.Close();
}
cn.Dispose();
}
foreach (DataRow row in dt.Rows)
{
tables.Add(row["name"].ToString());
}
return tables;
}
#>
Я не совсем понимаю, в чем проблема. Не могли бы вы сделать минутку и нажать кнопку «Изменить», чтобы уточнить вопрос? Возможно, покажите некоторые из кода, который вы используете. – billinkc
Пожалуйста, поделитесь примером кода, где это происходит не так. –
На самом деле совершенно невозможно помочь без кода примера. – bc004346