Eu verifiquei muitos tópicos agora e não consigo encontrar uma resposta para isso, e eu preciso estar bastante certo / confiante de que estou correto em assumir isso antes de responder a um cliente.
então, como diz o cabeçalho, O SQL Server valida um procedimento armazenado antes de executá-lo?
IE: Mesmo se eu tiver um IF statement
que nunca vai atender a uma determinada condição, será o código em que IF statement condition
ser verificado e validado antes de executar?
EDITAR: Aqui está um exemplo rápido:
DECLARE @ParamSource VARCHAR(2) = "V3"
IF @ParamSource = "V1"
BEGIN
--USE LINKED SERVER HERE WHICH THROWS AN ERROR ABOUT CONNECTIONS
END
IF @ParamSource = "V3"
BEGIN
--DO MY ACTUAL CODE
END
Eu nunca encontrarei essa primeira condição, mas por algum motivo, meu proc armazenado está tentando validar em tempo de execução e continua cometendo erros.
Respostas:
1 para resposta № 1Quando um procedimento armazenado é criado, écompilado, o que significa que cada objeto usado em um procedimento armazenado é validado. Para todos os objetos existentes, você também precisa ter acesso a eles. Isso criará um plano de execução para esse procedimento armazenado e, desde que o procedimento não seja alterado, o plano de execução deverá permanecer válido. Se algum objeto de tabela usado no procedimento armazenado não existir (somente tabela, não servidores vinculados), o plano de execução não será criado neste momento, mas o procedimento será criado se nenhum outro erro for encontrado.
No seu exemplo, você precisa acessar o linkobjeto do servidor para criar seu procedimento armazenado. Após a criação, se você não tiver mais acesso ao servidor vinculado, seu procedimento ainda será executado, mas gerará um erro se precisar acessar o servidor vinculado IF @ParamSource = "V1"
. No entanto, se ele não acertar o servidor vinculado IF @ParamSource = "V3"
, não haverá erro.
Basicamente, isso significa que o usuário que cria o procedimento precisa ter acesso ao servidor vinculado.