问题标签 [table-valued-parameters]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
248 浏览

parameters - 如何创建没有预定义表结构的表值参数

我想从我的程序中构建的数据表创建一个新的 SQL 表。我只是想将整个表复制到 MSSQL。根据我的研究,我发现似乎是答案:

附带说明一下,在 SQL 2008 中,有一种非常简单的方法可以从客户端定义的数据表中创建表:将数据表作为表值参数传递,然后发出 SELECT * INTO FROM @tvp,这将有效地传输定义将 Datatable 及其内容数据转换为 SQL 中的真实表。

(由 Remus Rusan 在此问题下发布 --- 从 C# 数据表创建 SQL Server 表)

我无法弄清楚的是如何在没有表定义的情况下在 SQL Server 中定义表值参数。所有文档都显示了定义@tvpwith 列定义,这当然违背了SELECT * INTO. @tvp除非我完全遗漏了某些东西,否则如果没有 SQL 服务器端声明和调用 SQL 语句的简短 sp,则无法执行上述操作。

0 投票
1 回答
560 浏览

sql-server-2008 - 表插入速率减慢表大小增加

解析一些数据并将其插入 .NET 的 3 个表中。使用表值参数传递数据,因为某些插入是 600,000 行。传递对象(不是 DataTables),它们是通过引用传递的(TVP 的性质)。由于插入值一次限制为 1000 行,因此与直接值插入相比获得了 100:1 的增益。在存储过程中,从 TVP 到实际表的插入按聚集索引排序。这些表除了聚集索引之外没有其他索引。SP 采用 TABLOCK,因为它们是一次写入表和一个数据加载器。填充因子 100。数据或事务日志大小没有增加 - 它的大小适合总数据负载。终于到问题了。在过去 4 小时内插入了 2 亿行。插入响应时间减少了 1/2。如果填充因子为 100 并且我插入的是按聚集索引排序的,那么为什么响应下降?我能做些什么来解决这个问题?

在我使用它之前我没有得到 TVP——它就像一个反向 DataReader。

我要感谢您的帮助,并为不正确的问题陈述道歉。对于每个解析(在本例中我解析 200,000),插入按聚集索引排序。然而,对于 3 个表中只有 1 个表是下一个整体以聚集索引顺序进行的解析。解析 70,000 后,好表的扫描密度为 99%,但其他两个表碎片严重,扫描密度为 12%。

在两个碎片表上设置填充因子 50 并重新建立索引。现在我得到了大约 1/3 的最大速度。我只需要每隔几个小时停止该过程并重新索引一次。

我最终做的是更改聚集索引以匹配插入顺序。对曾经聚集的内容创建了唯一索引。我禁用唯一,索引插入数据,然后重建唯一索引。在这种情况下,我在 10 小时的跑步中获得了 300:1 的性能。这不是一个额外的 0 - 三百比一。这不是捏造的 - 与从排序索引和填充因子或 30 开始相比。即使有额外的索引,我的表大小也更小,因为我可以将两个填充因子都设置为 100。

我在某些查询上使用#temp,因此我可以按照只有查询知道的顺序获取行。我将#temp 转换为TVP 并获得了1/2 秒(大约是创建和删除#temp 所需的时间)。

0 投票
2 回答
9365 浏览

sql-server - 将表值参数传递给跨不同数据库的存储过程

我正在使用SQL Server 2008

如何将表值参数传递给跨不同数据库但同一服务器的存储过程?

我应该在两个数据库中创建相同的表类型吗?

请根据问题给出示例或链接。

感谢您提供任何帮助。

0 投票
1 回答
1612 浏览

sql-server-2008 - 使用 robconery / mass 访问存储过程?

Rob 的另一篇关于大规模 ORM的精彩文章。我无法找到有关如何访问存储过程的参考资料。 SubSonic在使用 ActiveRecords 的开销方面存在一些问题,因此我更喜欢使用存储过程进行数据访问,仍然使用 SubSonic ORM。

我还没有看到在 ORM 中完全支持 SQL Server 的 TVP 之类的东西,所以我 修改了 SubSonic(无耻插件)来支持它们。

是否可以使用 Massive 访问 SQL Server 存储过程。其次,有TVP支持吗?

0 投票
1 回答
1225 浏览

sql - 在存储过程中有效地过滤表值参数中的数据

我有一个表值类型作为存储过程的参数,其中包含多达数千行。我对这个存储过程执行了几个操作(当前是一个 MERGE 和一个 INSERT),但在这些操作之前我想过滤谓词上的参数内容:

执行此操作的最有效方法是声明表类型的另一个变量,插入其中,然后使用该变量进行合并和插入:

或者每次我从@data中选择一些东西时使用谓词:

或者是其他东西?

0 投票
1 回答
7989 浏览

c# - 如何通过不提交当前会话事务将 DataTable 作为参数传递给存储过程?

我的代码如下所示:

代码工作正常,但如果我不提交事务,它会引发异常,如图所示

System.InvalidOperationException:当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery 要求命令具有事务。该命令的 Transaction 属性尚未初始化。

但我不希望在完成整个操作之前提交事务。我怎样才能做到这一点?

0 投票
1 回答
422 浏览

c# - 为接受表值参数的存储过程生成表参数

我正在调用一个采用表值参数的存储过程。

我知道传递此参数的以下选项: create DataTableDbDataReaderIList<SqlDataRecord>.

我正在使用IList<SqlDataRecord>(使用DataTable类似),但它涉及编写大量样板代码:创建集合、设置每个列的类型、添加行、设置每个单元格的值。

我认为这正是 Entity Framework 应该自动化的代码类型。所以我希望定义与 SQL TVP 类型匹配的 C# 类,添加常用的 EF 属性,创建这些对象的集合并让 EF 实现DbDataReaderIList<SqlDataRecord>在我的集合之上。但是我找不到任何方法来做到这一点——例如,有EntityDataReader,但那是从 SQL 中读取的——我找不到在内存集合之上实现任何合适接口的实现。

在我开始使用反射自己编写之前,有什么建议吗?

0 投票
0 回答
358 浏览

object - 将对象传递给 sql server 存储过程(作为 TVP)

我有一个场景,我将实体(对象)与其他依赖子实体一起传递给存储过程,并且 SP 应该在数据库中为该实体创建/删除/更新相应的表。

例如 - 实体 - 人员 ChildEntity - 技能、职位详情。

所以我将只传递包含所有其他对象集合的 Person 对象,并且存储过程将接受该参数并执行相应的 CRUD 操作。

是否有任何选项可以让我将整个对象传递给 DB,然后使用 DB 中的对象。(我不想使用 XML 方法也想传递整个对象而不是将对象分成单个实体)

需要你的建议,谢谢。

亲切的问候

0 投票
2 回答
1065 浏览

asp.net - 如何将 Type DataTable (TVP) 导出到 .csv 或 .xls 文件?

我想将 TVP(数据表类型)导出到 .csv 文件或 .xls,但更多的是使用 aspx 导出到 .csv。你能帮我解决这个问题吗?

0 投票
1 回答
384 浏览

c# - EF 中的错误 TVP

我在 EF + SP 中使用 EF + 函数在 sql 2008 中发送和获取值。

SP:

电视节目:

但在将 SP 添加到 EF 时显示此错误:

生成的模型带有警告或错误。

有关详细信息,请参阅错误列表。在运行您的应用程序之前,必须解决这些问题。

从数据库加载元数据耗时 00:00:02.5618735。

生成模型耗时 00:00:01.2346890。