Question

Je dois passer une liste de valeurs-clés à une procédure stockée dans SQL-Server, et que la procédure stockée retourne ensuite en arrière les valeurs nécessaires pour un rapport Crystal.

Au lieu d'envoyer une liste séparée par des virgules, puis que l'analyse syntaxique, il a été suggéré que j'utiliser un type de tableau. Donc, j'ai défini ce type de table simplement en entiers:

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

Cependant, maintenant je dois modifier mon rapport Crystal à prendre cela comme un paramètre d'entrée. (La procédure stockée commence par ...

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

Les rapports seront principalement appelés avec ColdFusion ou C # .net, donc je ne pense pas qu'il y aura un problème à ajouter les ID du type de table. Mais je ne sais pas comment définir ce paramètre à Crystal. La liste des types dans l'assistant de création de paramètres est rahter peu.

Était-ce utile?

La solution 3

Pour autant que je peux dire, cela est impossible. Cristal ne prend pas les types de données qu'il ne reconnaît pas d'autres applications, telles que SQL Server.

Autres conseils

Je ne pense pas que vous utilisez le concept de paramètre à Crystal de la bonne façon. A ma connaissance, il est préférable d'utiliser pour la saisie manuelle des données (et que vous essayez de passer un tableau multidimensionnel, pas le meilleur usage). Je recommande:

  1. Votre première idée de l'alimentation dans la table comme une chaîne délimitée par des virgules.
    OU
  2. Enregistrer la sortie de votre procédure à une table temporaire dans le SQL Server et l'importation que.

Normalement, un rapport Crystal qui ruisselle une procédure est créée en pointant le rapport à la procédure - tous les paramètres requis pour la procédure sont générés automatiquement dans le rapport. Si vous avez fait cela dans le concepteur Crystal Reports sans rapport générer le paramètre d'entrée de la table, alors je ne pense pas que vous pouvez le faire de cette façon.

Une autre alternative à l'aide d'une liste séparée par des virgules, avez-vous envisagé:

  • créer une table pour tenir les identifiants de session et des valeurs d'entrée,
  • peuplant la table juste avant l'exécution du rapport avec un ID de session et les valeurs d'entrée nécessaires,
  • passer l'ID de session le rapport en tant que paramètre,
  • passer l'ID de session du rapport à la procédure en tant que paramètre,
  • codage de la procédure pour sélectionner les valeurs d'entrée de la nouvelle table en fonction de l'ID de session, et en supprimant les entrées de l'ID de session après l'exécution du rapport?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top