将用户定义表中的日期值传递给 SQL Server 2008 存储过程
Posted
技术标签:
【中文标题】将用户定义表中的日期值传递给 SQL Server 2008 存储过程【英文标题】:Passing Date value from user defined table to a SQL Server 2008 stored procedure 【发布时间】:2017-12-01 17:38:08 【问题描述】:将系统定义表中的日期值传递给从 vb.net 调用的存储过程会导致错误:
将参数值从 DataTable 转换为 DateTime 失败
代码:
Dim ValueTable As New DataTable
ValueTable.Columns.Add("Value", GetType(Double))
ValueTable.Columns.Add("timestamp", GetType(DateTime))
ValueTable.Columns.Add("point", GetType(Integer))
ValueTable.Columns.Add("valueNumeric", GetType(Double))
用户定义表如下
CREATE TYPE [dbo].[ValueTable] AS TABLE
(
OID int primary key,
[Value] [float] NULL,
[timestamp] [datetime] NULL,
[point] [int] NULL,
[valueNumeric] [float] NULL
)
GO
存储过程如下
CREATE PROCEDURE [dbo].[Insert_Values]
@tblValues AS ValueTable READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Value (Value, timestamp, Point, ValueNumeric)
SELECT
Value, timestamp, point, valueNumeric
FROM
@tblValues
END
我需要通过从 vb.net 代码调用的存储过程插入多行。
当从 vb 以 SqlCommand
运行时,我收到此错误:
数据库错误:将参数值从 DataTable 转换为 DateTime 失败。
数据库是 SQL Server 2008。
【问题讨论】:
【参考方案1】:在您创建的类型中,您有 5 列。您定义的数据表只定义了 4 列。我认为这是造成问题的原因。此外,您还需要更改存储过程以包含 OID 列,因为它是主键。
【讨论】:
以上是关于将用户定义表中的日期值传递给 SQL Server 2008 存储过程的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL Server 2014 中的 Select 查询中将数据分配给用户定义的表类型
使用 JDBC 将用户定义的表类型传递给 SQL Server 存储过程