J'ai une procédure stockée qui accepte trois parameters.
Est-il possible d'appeler cette procédure stockée avec une requête en input?
À titre d'exemple, j'ai tableA
.
SELECT * FROM TABLEA | A | B | C | |---+---+---| | 1 | 2 | 3 | | 4 | 5 | 6 |
Maintenant, y a-t-il un moyen que je puisse appeler
EXEC sp_name (SELECT * FROM TABLEA)
de sorte que la procédure stockée s'exécutera pour chaque ligne?
Mon raisonnement derrière ceci est que j'ai une procédure stockée qui doit être appelée pour plusieurs lignes. Je peux écrire un script pour le faire, mais je veux savoir s'il est possible de le faire avec TSQL.
La meilleure façon d'y parvenir consiste à créer votre deuxième procédure stockée en tant que fonction définie par l'user. Ensuite, vous pouvez l'appeler de cette façon:
SELECT * FROM TableA CROSS APPLY dbo.yourUserFunction(column1, column2, etc)
Ou, il peut y avoir un moyen de combiner les deux procédures stockées dans un set, mais je devrais voir ce qui était dans le deuxième que vous appelez.
Cette solution suppose que le T-SQL est en cours d'exécution sur SQL SERVER 2008 et au-dessus
Créer une variable de type de table, Ceci doit être fait seulement une fois USE YOURDBNAME;
Allez Create TYPE TableAType as Table (A int null,B int null, C int null);
Cela crée une variable de type table dans les types de tables définis par l'user dans la database que vous utilisez actuellement.
Dans votre proc Stored, Déclarez une variable de ce type de table. et Remplissez-le avec le contenu de la table A. Exemple:
Create Procedure MyStoredProcedure1 AS Declare @TableB as TableAType; Insert into @TableB(A,B,C) Select A,B,C from TableA;
Créez votre Proc. Stockée principale
Create Procedure MyStoredProcedure2 @TVP TableAType READONLY as EXEC sp_Name @TVP;
Cela devrait faire le travail pour vous, Pour plus de reference, s'il vous plaît voir le lien ci-dessous # http://msdn.microsoft.com/en-us/library/bb510489%28v=sql.105%29.aspx
Techniquement, oui, mais votre appel au sproc est mal formaté.
Exec sp_name 'SELECT * FROM TABLEA'
ou
Exec sp_name @sql1 = 'SELECT * FROM TABLEA'
Cela dit, ce que vous essayez de faire n'est peut-être pas une bonne idée.