Nano Hash - криптовалюты, майнинг, программирование

Процедура Sql Server ODBC TVP со значением поля NULL

Резюме. Как указать значение поля, допускающее значение NULL, в индексе строки/столбца параметра табличного значения с использованием метода полностью связанного многострочного буфера 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] равно null:

ОБЪЯВИТЬ @BatchTVP КАК [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;

Приведенный выше код работает нормально, и значение вставляется в таблицу, как и ожидалось.

Теперь я хочу реплицировать этот код sql из С++, используя ODBC и табличный параметр с полностью связанными многострочными буферами (отправлять данные как TVP со всеми значениями в памяти), как описано в этой статье technet: http://technet.microsoft.com/en-us/library/ff878030.aspx

Я прочитал большинство страниц спецификации, но не смог определить, как этого добиться.

Спасибо за любую подсказку.

Фредерик


Ответы:


1

Что вам нужно сделать, так это поместить SQL_NULL_DATA в ваш буфер длины, когда вы привязываетесь к параметру столбца. Это означает, что вы не можете использовать удобный SQL_NTS для strings с нулевым завершением. Таким образом, вы должны носить свои string длины в буфере. Где значение будет нулевым? - используйте SQL_NULL_DATA вместо фактической длины или SQL_NTS в этом отношении - это также работает в буфере.

29.04.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..