【发布时间】:2015-01-05 15:47:54
【问题描述】:
我刚刚开始在 sql server 2008 中使用表值参数来更新表。基本上,我逐列创建到现有表的用户定义表类型映射,并将其用作表值参数,将数据传递到服务器以进行删除、更新和插入。在大多数情况下,效果很好。但是,对于具有复合主键的表,当部分键发生更改时,此方法将失败,因为 tvp 仅包含一组键值(当前或原始)。我的问题是处理此类案件的最佳方法是什么?是否必须在表类型定义中添加第二组主键列?
一个简化的例子: 表:
CREATE TABLE [dbo].[Prices](
[ID] [int] NOT NULL PRIMARY KEY,
[Date] [smalldatetime] NOT NULL PRIMARY KEY,
[Value] [float] NOT NULL,
CONSTRAINT [PK_Prices] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[Date] ASC
)
)
Table Type
CREATE TYPE [dbo].[tvp_Prices] AS TABLE(
[ID] [int] NOT NULL,
[Date] [smalldatetime] NOT NULL,
[Value] [float] NOT NULL
)
Add some data to the table
Insert Into [dbo].[Prices] Values (1, '1/1/2015', 1.2)
Insert Into [dbo].[Prices] Values (1, '1/2/2015', 1.3)
Insert Into [dbo].[Prices] Values (2, '1/1/2015', 1.4)
Insert Into [dbo].[Prices] Values (2, '1/2/2015', 1.5)
in c#, load the Prices to DataTable pricesTable,
update some value:
pricesTable.Rows[1]["Date"] = new DateTime(2015, 1, 3);
现在的问题是如何使用表值参数(tvp_Prices)将更改保存回服务器?
【问题讨论】:
-
不清楚您所说的“这种情况”是什么意思?请添加更多详细信息并展示您已经完成的工作。
-
您能否添加一个发生冲突的示例?我完全不清楚你的问题是什么。
标签: sql-server composite-primary-key table-valued-parameters