【问题标题】:Sql Server ODBC TVP procedure with a NULL field value具有 NULL 字段值的 Sql Server ODBC TVP 过程
【发布时间】:2014-05-14 18:35:40
【问题描述】:

总结: 如何使用 odbc 完全绑定多行缓冲区技术在表值参数的行/列索引处指定可为空的字段值?

详情: 我已经定义了一个表类型如下:

CREATE TYPE tp_Transition AS TABLE 
(
    [Timestamp] [datetimeoffset](7) NOT NULL,
    [Value] [float] NULL,
);
GO

所以 Timestamp 不能为空,但 Value 可以。

现在我使用这个新定义的类型作为表值参数创建一个新的存储过程:

CREATE PROCEDURE [dbo].[sp_InsertTransition]
  @TransitionBatch AS [tp_Transition] READONLY
AS
BEGIN
    SET NOCOUNT ON
    INSERT INTO [dbo].[Transition] ([Timestamp], [Value])
        SELECT [Timestamp], [Value] FROM @TransitionBatch;
END;

为了测试这个新过程,我编写了以下代码,注意第 2 行的 [Value] 字段为空:

声明@BatchTVP AS [tp_Transition];

/* Add data to the table variable. */
INSERT INTO @BatchTVP ([Timestamp], [Value])
    VALUES
    ('2014-05-14 13:05:00.000', 130500.009),
    ('2014-05-14 13:05:01.000', NULL);

/* Pass the table variable data to a stored procedure. */
EXEC [dbo].[sp_InsertTransition] @BatchTVP;

上面的代码工作正常,值按预期插入到表中。

现在我想使用 ODBC 和 具有完全绑定的多行缓冲区的表值参数(将数据作为具有内存中所有值的 TVP 发送),如本文中所述: http://technet.microsoft.com/en-us/library/ff878030.aspx

我已阅读规范的大部分页面,但无法确定实现此目的的方法。

感谢任何提示。

弗雷德里克

【问题讨论】:

    标签: sql-server stored-procedures nullable table-valued-parameters sqlncli


    【解决方案1】:

    当您绑定到 column 参数时,您要做的就是将 SQL_NULL_DATA 放入您的长度缓冲区中。这意味着您不能将方便的SQL_NTS 用于空终止strings。因此,您必须在缓冲区中携带 string 长度。值会在哪里为空? - 使用SQL_NULL_DATA 而不是实际长度或SQL_NTS - 这在缓冲区中也很有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多