正如这里所讨论的:将List<> 传递给 SQL 存储过程和许多其他地方,将表作为参数传递的一种方法是使用 SqlParameter。
这样做的问题是它需要在 TypeName 属性中指定用户定义的表类型。
我需要从 Excel 文件加载数据并将其作为参数传递给 SQL 语句,该语句会将这些数据与其他数据库表连接起来以获得结果。
为此,我需要为每个可能的 Excel 文件变体创建用户定义的表格类型。我不想用那些仅用于从每个 Excel 文件传递数据的类型污染 SQL 类型。我如何做到这一点?
您可能会问我如何加入我不知道类型的东西 - 答案是 - 我知道某些字段的名称和类型,但不是全部。此外,如果我想使用 select * 返回连接的数据,它将适用于任何字段列表,而无需我将所有字段都硬编码在类型中。
我不能使用 OPENROWSET 直接从 SQL 加入这个文件,因为我有 64 位 SQL Server,它不起作用给我一个奇怪的错误。
SQL Server中有临时表的概念,但是没有临时类型的概念,如何模拟临时类型或者在传表时避免使用它?
我可以将数据作为 XML 传递,但如果数据大小足够大且数据大小限制为 2Gb,则效率似乎较低。
组织它的一种方法是创建类型,然后执行语句,然后在之后删除类型或使用 TRY..CATCH 并在 catch 中删除类型。
另一个是制作特殊的模式,在该模式中生成唯一的类型名称,并使用垃圾收集 SQL 作业不时清理它。它可以与第一种方法结合使用,仅用于清理剩菜。
还有其他建议吗?