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

Foi útil?

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:

  1. você pode voltar a usar o mesmo bit de SQL com diferentes valores
  2. você pode pegar o valor de retorno e teste para o sucesso / erro
  3. 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top