Iniciar sessão com a Microsoft
Iniciar sessão ou criar uma conta.
Olá,
Selecione uma conta diferente.
Tem várias contas
Selecione a conta com a qual pretende iniciar sessão.

Sintomas

Assuma que tem um procedimento armazenado transact-SQL, como o seguinte que requer um parâmetro de valor de mesa (TVP) que tem uma restrição como argumento:

create type TestTvpType as table   

(

  id int primary key, -- UNIQUE will also do the trick

  data int

); 

go 

create procedure TestTvpProc @tvp TestTvpType readonly

as

begin

  select * from @tvp;

end;

go

Num cenário em que este procedimento é chamado de um procedimento armazenado SQLCLR e o constrangimento é violado pelo argumento, pode receber incorretamente um sistema afirmando, quando você esperaria receber uma mensagem de erro de "violação de restrição".

Segue-se um exemplo de um procedimento SQLCLR que produz uma violação de restrição para o procedimento armazenado:

[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));

              // Populate the TVP so it will trigger a PRIMARY KEY VIOLATION error

              myDataTable.Rows.Add(1, 1000);

              myDataTable.Rows.Add(1, 2000);

              SqlParameter parameter = new SqlParameter();

              parameter.ParameterName = "@tvp";

              parameter.SqlDbType = System.Data.SqlDbType.Structured;

              parameter.Value = myDataTable;

              SqlCommand command = new SqlCommand("TestTvpProc", connection);

              command.CommandType = CommandType.StoredProcedure;

              command.Parameters.Add(parameter);

              connection.Open();

              using (SqlDataReader reader = command.ExecuteReader())

              {

                     while (reader.Read())

                     {

                           …;

                     }

              }

       }

}

Resolução

Esta emissão é corrigida nas seguintes atualizações cumulativas para o SQL Server:

Atualização Cumulativa 5 para SQL Server 2016 RTM

Atualização Cumulativa 2 para SQL Server 2016 SP1

Atualização Cumulativa 4 para SQL Server 2014 Service Pack 2

Nota Esta atualização provoca a devolução da mensagem de erro correta de "violação de restrição".

Cada nova atualização cumulativa do SQL Server contém todas as correções de hotfixes e correções de segurança que foram incluídas na atualização cumulativa anterior. Confira as últimas atualizações cumulativas do SQL Server:

Última atualização cumulativa para SQL Server 2016

Últimas atualizações cumulativas para SQL Server 2014

Estado

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

 

Referências

Saiba mais sobre a terminologia que a Microsoft utiliza para descrever atualizações de software.

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.

Estas informações foram úteis?

Quão satisfeito está com a qualidade do idioma?
O que afetou a sua experiência?
Ao selecionar submeter, o seu feedback será utilizado para melhorar os produtos e serviços da Microsoft. O seu administrador de TI poderá recolher estes dados. Declaração de Privacidade.

Obrigado pelo seu feedback!

×