将用户定义表中的日期值传递给 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 查询中将数据分配给用户定义的表类型

将 SQL 输入日期范围传递给 SHINY 中的查询

使用 JDBC 将用户定义的表类型传递给 SQL Server 存储过程

使用 JDBC 将用户定义的表类型传递给 SQL Server 存储过程

如何将 crud 表中的行值传递给自定义提交按钮

如何将日期值传递给 plsql 中的游标?