J'ai 2 tables sur ma base de données, une appelée Sales.Salesperson qui est la source, et la base de données cible est dbo.Salesperson. J'ai fait un BIML qui utilise le code C# pour obtenir une liste des tables existantes de la source, puis importer toutes les données de la source à la cible, pour mon exemple, j'ai juste la table 1, que j'ai listée ci-dessus. Sur le C#, j'utilise la connexion SQL et la commande SQL pour obtenir la table et le schéma de toutes les tables (encore une fois pour qu'il puisse être dynamique),Connexion BIML et C# SQL et commande vers le numéro SSIS
LE PROBLÈME, parce que j'ai un point, pour séparer le schéma et table, dans mon SQLcommand, quand je vais de BIML à Générer SSIS paquet, il me donne un message d'erreur de SSIS étape EXECUTESQL DirectInput, quand je tente de tronquer la table < # = table #> erreur dit "Sales.SalesPerson dans le package DynamicDataLoad comprend des caractères non valides (/:[].=) pour SSIS les caractères non valides seront remplacés with_ » et de ce fait, je reçois une erreur sur mon package SSIS
Voici le code ci-dessous pour aider.
<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>
et ci-dessous est la partie C#, si vous regardez la commande SQL, je ramène schéma puis table dans une liste appelée "table, qui est utilisé dans le BIML ci-dessus pour lister toutes les tables à convertir en package SSIS, ceci est utilisé dans la partie BIML appelée truncation, qui est l'origine de l'erreur dans le 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;
}
#>
Je ne suis pas tout à fait le suivi de ce problème. Pourriez-vous prendre un moment et cliquer sur le bouton d'édition pour clarifier la question? Peut-être montrer une partie du code que vous utilisez – billinkc
S'il vous plaît partager un échantillon du code où cela va mal –
Vraiment tout à fait impossible d'aider sans exemple de code. – bc004346