Obtenir le nombre de lignes dans un résultat de procédure stockée quel que soit le nombre / type de colonnes

J'ai développé le code suivant:

CREATE PROCEDURE [dbo].[Test01] AS BEGIN SELECT * FROM TestTable END CREATE PROCEDURE [dbo].[Test02] AS BEGIN DECLARE @tmp TABLE ( TestID int, Test nvarchar(100), ) INSERT INTO @tmp EXEC Test01 SELECT COUNT(*) FROM @tmp END 

Mais si j'ajoute ou supprime une colonne sur TestTable je dois modifier @tmp sinon le résultat est:

Le nom de la colonne ou le nombre de valeurs fournies ne correspond pas à la définition de la table

Comment puis-je résoudre ce problème?

Essayez de spécifier les colonnes manuellement:

 SELECT a, b FROM TestTable 

et

 INSERT INTO @tmp (a, b) 

Cela devrait corriger l'erreur que vous avez mentionnée.

Mon premier commentaire serait que SELECT * est mal vu, sauf si vous savez ce que vous faites. Je déconseille fortement dans votre cas d'utilisation particulier, précisément parce que cela peut vous mettre dans le pésortingn que vous avez identifié.

Dans votre cas particulier, pour le SP spécifique écrit, vous n'avez pas utilisé SET NOCOUNT ON, vous pouvez donc récupérer le nombre en utilisant

 SELECT @@ROWCOUNT 

Mais comme l'a commenté Martin, c'est juste un exemple de code que vous avez jeté set. Sinon, pourquoi même utiliser 2 SP.