Stored Procedure Sintaxe
-
02-07-2019 - |
Pergunta
O meu procedimento armazenado é chamado como abaixo de um pacote SQL instegartion dentro do SQL Server 2005
EXEC? = Validation.PopulateFaultsFileDetails? , 0
Embora eu não tenho certeza o que o? meios
Solução
Quando esta statment SQL é chamado, ambos os pontos de interrogação (?) Será substituído. A primeira será substituído por uma variável que vai receber o valor de retorno do procedimento armazenado. A segunda será substituído por um valor que vai ser transmitida para o procedimento armazenado. O código para usar esta declaração será parecido com este (pseudocódigo):
dim result
SQL = "EXEC ? = Validation.PopulateFaultsFileDetails ? , 0"
SQL.execute(result, 99) // pass in 99 to the stored proc
debug.print result
Isto dá-lhe 3 vantagens:
- você pode voltar a usar o mesmo bit de SQL com diferentes valores
- você pode pegar o valor de retorno e teste para o sucesso / erro
- Se o valor que você está passando é uma string, deve ser corretamente escapou para você, reduzindo o risco de vulnerabilidades de injeção SQL em sua aplicação.
Outras dicas
A? stands para variável, para ser mais preciso, um parâmetro. O primeiro ? é o valor de retorno do procedimento armazenado e o segundo é o primeiro parâmetro do procedimento armazenado
Graças Eu aprecio a resposta.
Eu era capaz de executar com sucesso o procedimento armazenado usando DECLARE varchar @FaultsFileName int DECLARE @FaultsFileID EXEC @FaultsFileID = Validation.PopulateFaultsFileDetails 'SameMonth Test.txt', @FaultsFileID SELECIONAR @FaultsFileID
Mas quando eu passar o parâmetro de entrada como 'SameMonth Test.txt' na Integração pacote eu recebo um erro que diz:
Os nomes de parâmetros não pode ser uma mistura de tipos ordinais e nomeados.. "Motivos de falha possíveis:. Problemas com a consulta, 'ResultSet propriedade' não está ajustado corretamente, parâmetros não definidos corretamente ou conexão não estabelecida corretamente