Skip to content

Commit

Permalink
Fixed #2 - TableAppenderResponse now works with synonyms too
Browse files Browse the repository at this point in the history
  • Loading branch information
spaghettidba committed Sep 19, 2018
1 parent 192772d commit ddf2ae0
Showing 1 changed file with 36 additions and 15 deletions.
51 changes: 36 additions & 15 deletions XESmartTarget.Core/Utils/DataTableTSQLAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ public void WriteToServer()
Transaction))
{

bulkCopy.DestinationTableName = DestinationTableName;
bulkCopy.DestinationTableName = GetSynonymBase(DestinationTableName);
bulkCopy.BatchSize = BatchSize;
bulkCopy.BulkCopyTimeout = QueryTimeout;

Expand All @@ -362,33 +362,54 @@ public void WriteToServer()
private IEnumerable<string> GetColumns(string TableName)
{
string qry = @"
SELECT name
FROM sys.columns
WHERE object_id = OBJECT_ID(@ObjName)
ORDER BY column_id;
SELECT TOP(0) * FROM {0};
";

SqlCommand cmd = new SqlCommand(qry, Connection) { CommandTimeout = 600 };
SqlParameter prm = cmd.CreateParameter();
prm.Direction = ParameterDirection.Input;
prm.DbType = DbType.String;
prm.Size = 128;
prm.Value = TableName;
prm.ParameterName = "@ObjName";
cmd.Parameters.Add(prm);
SqlCommand cmd = new SqlCommand(String.Format(qry, TableName), Connection) { CommandTimeout = 600 };


DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
DataTable data = ds.Tables[0];

List<string> results = new List<string>();
foreach (DataRow row in data.Rows)
foreach (DataColumn col in data.Columns)
{
results.Add(row["name"].ToString());
results.Add(col.ColumnName);
}
return results;
}


private string GetSynonymBase(string ObjectName)
{
string result = ObjectName;

string qry = @"
SELECT base_object_name
FROM sys.synonyms
WHERE name = @ObjName
";

SqlCommand cmd = new SqlCommand(qry, Connection) { CommandTimeout = 600 };

SqlParameter prm = cmd.CreateParameter();
prm.Direction = ParameterDirection.Input;
prm.DbType = DbType.String;
prm.Size = 128;
prm.Value = ObjectName;
prm.ParameterName = "@ObjName";
cmd.Parameters.Add(prm);

string sqlResult = (string)cmd.ExecuteScalar();
if(sqlResult != null)
{
result = sqlResult;
}

return result;
}

}
}

0 comments on commit ddf2ae0

Please sign in to comment.