Je suppose que VS essaie de déterminer une liste de champs en exécutant le SP. Mais comme il ne sait pas quoi passer au SP, il utilise des paramètres vides. Maintenant, bien sûr, votre instruction select échoue.
Vous pouvez essayer d'ajouter ce qui suit à votre SP:
IF ISNULL(@TableName,'') = '' SET @TableName = '<Name of a test table>';
IF ISNULL(@FieldName,'') = '' SET @FieldName = '<Name of some field>';
Utilisez les noms de certains champs et de tables qui existent ici (par exemple les noms que vous souhaitez utiliser dans votre application, aussi).
vous pourriez aussi ajouter ce qui suit au-dessus du exec
:
IF (ISNULL(@TableName, '') = '') OR (ISNULL(@FieldName, '') = '')
BEGIN
SELECT -1 AS NewGeneratedId
RETURN 0
END
EDIT
Sur une note côté, je voudrais vous mettre en garde contre les problèmes de concurrence que je vois à venir de ce que votre code Est-ce que. Si ce code est supposé renvoyer un identifiant unique pour un nouvel enregistrement dans une table, je le reconce comme suit:
Créer une table NumberSeries
où chaque ligne contient un nom unique, une plage possible pour les ID et le courant Valeur d'ID.
Créez une procédure stockée qui utilise UPDATE ... OUTPUT
pour mettre à jour l'ID actuel d'une série numérique et l'extraire en une seule étape. De cette façon, vous pouvez vous assurer que la création d'un nouvel ID est une opération unique qui ne provoque pas de problèmes de simultanéité.
Merci beaucoup, j'ai utilisé votre première idée et ça marche! sur l'utilisation d'une table pour les problèmes de concurrence, je dois dire que c'est une bonne idée aussi, mais dans mon projet actuel, il n'y a qu'un seul utilisateur qui entre les données ... de toute façon, vraiment merci .. –