KB4010162 - 수정: SQLCLR 프로시저에서 TVP 인수가 있는 Transact-SQL 저장 프로시저가 호출되면 시스템 어설션이 발생합니다.

적용 대상
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1

증상

제약 조건이 인수인 TVP(테이블 반환 매개 변수)를 사용하는 다음과 같은 Transact-SQL 저장 프로시저가 있다고 가정합니다.

테이블로 TestTvpType 형식 만들기

(

id int 기본 키 -- UNIQUE도 요령을 수행합니다.

data int

);

GO

testTvpProc @tvp TestTvpType 읽기 전용 프로시저 만들기

방법

begin

에서 * 를 선택합니다.@tvp

끝;

GO

이 프로시저가 SQLCLR 저장 프로시저에서 호출되고 인수에 대한 제약 조건이 위반되는 시나리오에서는 "제약 조건 위반" 오류 메시지가 표시될 것으로 예상되는 경우 시스템 어설션을 잘못 받을 수 있습니다.

      

다음은 저장 프로시저에 대한 제약 조건 위반을 생성하는 SQLCLR 프로시저의 예입니다.

      

[SqlProcedure]

public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)

{

using (SqlConnection connection = new SqlConnection("context connection=true"))

{

sum = 0;

DataTable myDataTable = new DataTable("TestTvpType");

myDataTable.Columns.Add("id", typeof(Int32));

myDataTable.Columns.Add("data", typeof(Int32));

기본 키 위반 오류가 트리거되도록 TVP를 채웁니다.

myDataTable.Rows.Add(1, 1000);

myDataTable.Rows.Add(1, 2000);

SqlParameter 매개 변수 = 새 SqlParameter();

매개 변수. ParameterName = "@tvp";

매개 변수. SqlDbType = System.Data.SqlDbType.Structured;

매개 변수. 값 = myDataTable;

SqlCommand 명령 = 새 SqlCommand("TestTvpProc", connection);

명령. CommandType = CommandType.StoredProcedure;

명령. Parameters.Add(parameter);

연결. Open();

using(SqlDataReader reader = command. ExecuteReader())

{

while(reader. Read())

{

…;

}

}

}

}

해결 방법

이 문제는 SQL Server 대한 다음 누적 업데이트에서 해결되었습니다.

SQL Server 2016 RTM에 대한 누적 업데이트 5

SQL Server 2016 SP1의 누적 업데이트 2

SQL Server 2014 서비스 팩 2의 누적 업데이트 4

참고 이 업데이트로 인해 올바른 "제약 조건 위반" 오류 메시지가 반환됩니다.

SQL Server 대한 누적 업데이트 정보

SQL Server 대한 각각의 새로운 누적 업데이트에는 이전 누적 업데이트에 포함된 모든 핫픽스 및 보안 수정 사항이 포함됩니다. SQL Server 대한 최신 누적 업데이트를 확인하세요.

SQL Server 2016의 최신 누적 업데이트

SQL Server 2014의 최신 누적 업데이트

상태

Microsoft에서 이는 "적용 대상" 섹션에 나열된 Microsoft 제품에서의 문제임을 확인했습니다.

참조 자료

Microsoft에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어 에 대해 알아봅니다.