我必须以某种结构化格式将数据传递给SQL,该结构化格式位于匿名类型的列表的代码侧,该SQL随后转换为Temp表并因此用于进一步的联接。当前,我正在遍历数据并使用StringBuilder创建一个字符串,该字符串实际上是CREATE临时表和INSERT INTO语句。
下面是我的代码
StringBuilder sql = new StringBuilder();
sql.Append(@"
IF OBJECT_ID('tempdb..#Student') IS NOT NULL
DROP TABLE #Student
IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
DROP TABLE #Temp
CREATE TABLE #Student (StudentId int,StudentName varchar(500),Marks int, DepartmentId int);");
foreach (var item in studentData)
{
sql.AppendLine();
sql.AppendLine("INSERT INTO #Student (");
StringBuilder values = new StringBuilder("VALUES (");
bool isFirstColumn = true;
Type type = item.GetType();
PropertyInfo[] propertyInfo = type.GetProperties();
foreach (PropertyInfo property in propertyInfo)
{
string columnName = property.Name;
object columnValue = property.GetValue(item);
if (isFirstColumn)
isFirstColumn = false;
else
{
sql.Append(", ");
values.Append(", ");
}
sql.Append(columnName);
values.Append(columnValue);
}
sql.Append(") ");
sql.AppendLine();
sql.Append(values.ToString());
sql.Append(")");
}
sql.AppendLine();
sql.Append(@"SELECT *
INTO #Temp
FROM
(
SELECT *
FROM #Student s
JOIN Department d ON s.DepartmentId = d.DepartmentId
) as t");
我没有使用Stored Proc的选项。有没有比使用StringBuilder更好的选择来创建Temp表,然后将其插入SQL查询中?
我们可以将列表中的数据转换为XML,然后在字符串SQL查询中添加XML格式的数据吗?
有什么比这更好的帮助或建议了吗?
谢谢
答案 0 :(得分:0)
由于使用的是ADO.NET,因此可以使用Table-Valued Parameters并将表值类型传递给参数化的SQL语句。我选择使用存储过程,但是两者都可以。
修改后的MS Docs示例用法(未测试)
$unwantedProps = @($data | ? { $_ -match 'XOXO'})
if($unwantedProps.Count -gt 0)
{
$cleanedData = $data -notmatch 'XOXO'
return $cleanedData
}
else {
return
}