/ / SQL Server Valida um proc armazenado antes de executá-lo? - sql-server-2008, tsql, procedimentos armazenados

O SQL Server Valida um proc armazenado antes de executá-lo? - sql-server-2008, tsql, procedimentos armazenados

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 № 1

Quando 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.