Eu tenho uma restrição de verificação em uma coluna que usa uma UDF escalar. Eu tenho um requisito onde preciso fazer alterações no UDF. Com base no que sei, preciso descartar a restrição, fazer alterações na UDF e, em seguida, adicionar novamente a restrição. Durante o período em que a restrição é removida, estou preocupado que dados inválidos possam ser inseridos na tabela. Existe uma maneira de alterar o UDF sem eliminar a restrição? Se não, existe uma maneira de impedir que dados incorretos entrem na tabela?
relate perguntas
-
SQL Server 2012 Criar índice com Sort In TempDb On - Gains False?
-
Transparência de failover do SQL Server AlwaysOn
-
Por que as sequências Denali devem ter um desempenho melhor do que as colunas de identidade?
-
O SQL Server não deveria oferecer suporte a RANGE?
-
O que é SQL Server "Denali"? O que há de novo?
você não deveria
Quando você coloca uma UDF escalar em uma coluna computada ou verifica uma restrição, você se depara com dois problemas:
Sempre que possível:
com script
Não, infelizmente você não pode alterar uma função usada por uma restrição de verificação, mesmo quando desabilitada com NOCHECK.
Você pode contornar isso (sem risco de dados incorretos) por:-
Alternativamente, se você precisar reter os nomes da função e restrição de verificação, você pode fazer isso por:-
Você pode fazer tudo dentro de uma transação, o que forçará um
Sch-M
bloqueio de modificação de esquema na tabela, impedindo que qualquer dado seja inserido.Por exemplo:
Concordo que funções em restrições de verificação são uma má ideia e devem ser evitadas, se possível.
Um motivo comum para precisar de tal função é criar uma restrição de várias tabelas. No entanto, isso pode ser feito melhor usando um truque pouco conhecido usando exibições indexadas . Um método um pouco menos eficiente é um gatilho.