问题标签 [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.
.net - .Net 中的反射可以通过查看用户定义的类型名称来帮助动态构建表值参数/SqlMetaData[] 对象吗?
我已经开始在 Sql Server 2k8 中使用表值参数进行批处理操作。我非常喜欢这个功能,感觉它是在漫长的等待之后才出现的。
但是,为了从 .Net 代码中传递 TVP,构建 SQLMetaData[] 并在循环中填充值需要付出太多的努力。
如何避免在同步中维护 .Net 代码中的 Sql Server 和 SQLMetaData[] 对象中的用户定义类型?当我在 SQL 中更改类型定义时,没有简单的方法知道我在 .Net 的庞大代码中在哪里使用了该类型。
.Net Reflection 是否可以通过提供用户定义类型的名称来拯救程序员构造 SQLMetadata 并通过提供对象数组来帮助填充数据。
考虑这个例子:
现在,如果您的表有 100 列,想象一下您的代码。
sql-server - 存储过程中的表值参数有什么缺点?
我使用过各种版本的 MS SQL Server,包括 2000、2005、2008、R2、(Some)Denali。我从来没有对像存储过程中的表值参数这样的新功能如此兴奋。我也进行 C# 开发,并且正在挖掘 TVP,我使用它来最大限度地减少来自前端应用程序的数据库调用次数。
现在我真正的问题是使用表值参数有什么缺点。它几乎好得令人难以置信。
请分享你的想法。另外,我不想太深入地使用它而不得不改变。
c# - Handle multiple db updates from c# in SQL Server 2008
I like to find a way to handle multiple updates to a sql db (with one singe db roundtrip). I read about table-valued parameters in SQL Server 2008 http://www.codeproject.com/KB/database/TableValueParameters.aspx which seems really useful. But it seems I need to create both a stored procedure and a table type to use it. Is that true? Perhaps due to security? I would like to run a text query simply like this:
So
A) do I have to create both a stored procedure and a table type to use TVP's? and
B) what alternative method is recommended to send multiple updates (and inserts) to SQL Server?
sql-server-2008 - 如何使用表值参数插入多行然后返回它们的 ID?
在我的应用程序中,我有大量(100+)行需要插入到数据库中。一旦他们被插入数据库,我需要插入他们的孩子,这些孩子有一个外键引用回孩子。
我想知道是否有一种方法可以编写一个可以插入所有这些行并将它们的 ID 返回给我的应用程序的存储过程?
c# - 实体框架存储过程表值参数
我正在尝试调用一个接受表值参数的存储过程。我知道实体框架尚未直接支持此功能,但据我了解,您可以ExecuteStoreQuery
使用ObjectContext
. 我有一个通用实体框架存储库,其中有以下ExecuteStoredProcedure
方法:
命令字符串的结尾是这样的:
我试图在接受表值参数的存储过程上运行此方法,但它会中断。我在这里读到,参数需要是类型SqlParameter
,表值参数需要SqlDbType
设置为Structured
. 所以我这样做了,我收到一条错误消息:
因此,我将 SqlParameter.TypeName 设置为我在数据库上创建的用户定义类型的名称,然后当我运行查询时,我得到以下真正有用的错误:
如果我恢复到 ADO.NET 并执行数据读取器,我可以让查询运行,但我希望使用数据上下文让它工作。
有没有办法使用传递表值参数ExecuteStoreQuery
?此外,我实际上首先使用 Entity Framework Code 并将其转换DbContext
为 anObjectContext
以获取ExecuteStoreQuery
可用的方法。这是必要的还是我也可以这样做DbContext
?
vb.net - ADO.Net 表值参数 (TVP):操作数类型冲突:datetime2 与 int 不兼容
我正在使用 TVP,并且正在尝试将数据表作为 TVP 传递给存储过程。当命令尝试 时ExecuteNonQuery()
,它会引发错误:
操作数类型冲突:datetime2 与 int 不兼容。表值参数“@tvpPermitWork”的数据不符合参数的表类型。
我使用可视化工具检查了数据表,发现所有数据都是正确的。我现在被卡住了,我没有时间将其更改为具有单个参数的存储过程。
非常感谢任何有关如何解决此问题的建议。
c# - 如何将表值参数传递给 Merge 语句在空表上出现重复键错误?
我从 C# 代码将表值参数发送到 MS SQL Server 2008 R2 存储过程。我收到的错误是:“违反主键约束'PK_Example.ExampleTable'。无法在对象'Example.ExampleTable'中插入重复键。语句已终止。”
表结构:Example.ExampleTable
- PK 是唯一的约束。
存储过程:
至于上面的 IDLIST 部分:CREATE TYPE IDLIST AS TABLE (n int);
C#代码:
在执行时,我得到了错误。在示例集中,变量如下:年:2011 月:11 checkstatus:1 iDsList:(71 个唯一整数的列表)
我的功能的目的是有人单击网格上的“全部检查”,然后我将检查的状态保存到数据库中每个受影响的行,而无需遍历每一行。这是通过规范化创建的辅助表,因此每个表可能有也可能没有记录,因此合并。我收到错误并决定通过截断表并重试来简化问题,但即使表完全为空,我也会收到“重复键”错误。
所以核心问题是我如何才能在没有记录的情况下出现重复键错误,以及如何修复它以便不再收到错误?
sql-server-2008 - 使用表值参数从 CLR 存储过程中调用存储过程
情况:
一个 Clr 存储过程,它构建数据表,然后尝试使用 TVP 参数调用 SQL 存储过程。
编码:
..................................................... .....................
问题:
行为不稳定。有一次它起作用,在 x(其中 x 是随机的)调用之后,它会给我 y(其中 y 是随机的)“发生严重错误”,没有其他细节,之后循环将重新开始。据我所知,问题出在 CLR SP 方面,因为当错误开始发生时,SQL SP 可以更改并出现故障,因为错误保持不变。也许CLR SP和TVP之间没有爱,但我没有找到任何参考。
附带说明一下,当它工作时,它可能会工作很长时间,但如果我删除 SP 计划,它就会开始出现故障。(在那个“触发器”中也找不到逻辑)
有什么想法吗 ?先感谢您。
sql-server-2008 - 表值参数只读解决方法
我有一个带有表值参数的 SProc,@section
类型为dbo.SectionIn
。这个参数在整个 SProc 中都被使用,我想从中删除一些记录,但它当然是 ReadOnly 设计的。
我的计划是将其内容复制到表变量中并改用它。
我的问题是这是否会导致查询计划中的任何性能受到影响,如果没有,那么 ReadOnly 要求背后的原因是什么?
c# - 当我在 DataContext 中手动打开连接时要遵循什么模式
因此,我在我的 DataContext 中添加了对表值参数的丑陋支持(只是为了保持一致并且仍然能够从相同的数据上下文中调用我的过程)。
我调用this.Connection.CreateCommand()
,将其转换为SqlCommand
(因为SqlCommand
无论如何它都将支持 TVP),手动列出所有参数,包括参数SqlDbType.Structured
和ExecuteNonQuery
它。
这工作正常。
但。
在我的辅助方法中,我必须打开上下文连接,因为它可能已关闭。因为我手动打开连接,我必须手动关闭它吗?
我经历过这些:
如果我使用 Linq,是否必须手动关闭 SQL 连接?
我应该何时处理数据上下文
如果我使用 DataContext,何时开始与数据库的连接?
但他们实际上并没有回答我的问题。我知道在枚举结果时连接已关闭,但它比这更复杂。与枚举结果相反,调用方法不是只读操作。
此外,如果有环境事务,DataContext
在第一次方法调用后肯定不会关闭连接:
由于这一切,我不确定在连接方面做什么是正确的。
我只是打开连接并离开DataContext
管理它的生命周期,还是有一个模式可以遵循?
编辑:
实验表明,如果我让它保持打开状态,它会表现良好并自动尊重环境事务(如果有)。但是,我更喜欢对此提出可靠的建议。