Pergunta

Preciso passar uma lista de valores-chave para um procedimento armazenado no SQL-Server, e esse procedimento armazenado retorna os valores necessários para um relatório de cristal.

Em vez de enviar uma lista separada por vírgula e, em seguida, analisar isso, foi sugerido que eu usasse um tipo de tabela. Então, eu defini esse tipo de tabela como simplesmente feito de números inteiros:

CREATE TYPE [dbo].[SiteIdentifiers] AS TABLE 
(
    [SiteId]     BigInt, 
    PRIMARY KEY ([SiteId])
)

No entanto, agora preciso modificar meu relatório de cristal para aceitar isso como um parâmetro de entrada. (O procedimento armazenado começa com ...

CREATE  PROCEDURE [dbo].[sp_SiteReport]
    @SiteIds    [dbo].[SiteIdentifiers] ReadOnly
AS

Os relatórios serão chamados principalmente com Coldfusion ou C#.NET, então não acho que haja um problema em adicionar IDs ao tipo de tabela. Mas não sei como definir esse parâmetro em cristal. A lista de tipos no Assistente de Criar Novo Parâmetro é Rahter escasso.

Foi útil?

Solução 3

Até onde eu sei, isso não é possível. O Crystal não pega tipos de dados que não reconhece de outros aplicativos, como o SQL Server.

Outras dicas

Eu não acho que você está usando o conceito de parâmetro em Crystal da maneira certa. Que eu saiba, é melhor usado para inserir manualmente os dados (e você está tentando passar por uma matriz multidimensional, não o melhor uso). Eu recomendo:

  1. Sua primeira idéia de alimentar na tabela como uma string delimitada por vírgula.
    OU
  2. Salvando a saída do seu procedimento em uma tabela temporária no SQL-Server e importando isso.

Normalmente, um relatório de cristal que executa um procedimento é criado apontando o relatório no procedimento - quaisquer parâmetros necessários para o procedimento são gerados automaticamente no relatório. Se você fez isso no Crystal Reports Designer sem o relatório que gera o parâmetro de entrada da tabela, não acho que você possa fazê -lo dessa maneira.

Como outra alternativa ao uso de uma lista separada por vírgula, você considerou:

  • Criando uma tabela para manter IDs de sessão e valores de entrada,
  • Preparando a tabela pouco antes de executar o relatório com um ID da sessão e os valores de entrada necessários,
  • passando o ID da sessão para o relatório como um parâmetro,
  • passando o ID da sessão do relatório para o procedimento como um parâmetro,
  • codificando o procedimento para selecionar os valores de entrada da nova tabela com base no ID da sessão e remover as entradas para o ID da sessão após a execução do relatório?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top