2014-05-14 1 views
2

요약 : odbc 완전 바인딩 다중 행 버퍼 기술을 사용하여 테이블 값 매개 변수의 행/열 인덱스에서 Nullable 필드 값을 어떻게 지정합니까?NULL 필드 값이 포함 된 Sql Server ODBC TVP 프로 시저

세부 사항 : 다음과 같이 나는 테이블 유형을 정의했습니다 :

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

그래서 타임 스탬프는 null 일 수 없습니다 있지만 값이 있습니다.

지금 나는 테이블 반환 매개 변수로 새로 정의 된 형식을 사용하여 새 저장 프로 시저를 만들 :

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 [가치 점에 유의 ] 필드가 null입니다 :

DECLARE @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; 

위의 코드는 제대로 작동하며 예상대로 값이 테이블에 삽입됩니다. http://technet.microsoft.com/en-us/library/ff878030.aspx

:

는 지금은 ODBC와 완전 바운드 다중 행 버퍼이 TechNet 문서에 설명 된대로 (메모리의 모든 값을 가진 TVP로 데이터를 전송)와 테이블 반환 매개 변수를 사용하여 C++에서이 SQL 코드를 복제 할

사양의 대부분 페이지를 읽었지만이를 달성 할 수있는 방법을 정확히 알 수 없습니다.

어떤 힌트를 주셔서 감사합니다.

프레데릭

답변

0

당신이해야 할 당신이 열 매개 변수에 바인딩 할 때 길이 버퍼에 SQL_NULL_DATA을 배치됩니다. 즉, SQL_NTS을 null로 끝내려면 strings을 사용하면 편리합니다. 따라서 여러분은 여러분의 string 길이를 버퍼에서 옮겨야합니다. 값은 어디에 null입니까? - 실제 길이 대신 SQL_NULL_DATA을 사용하거나 버퍼에서 올바르게 작동하는 SQL_NTS을 사용하십시오.

관련 문제