2017-10-02 2 views
1

Si vous essayez d'exécuter du code ci-dessous, cela ne fonctionne pas, comment puis-je le corriger?Comment appeler un Proc stocké dans une instruction Select (SQL Server 2012)

SELECT Number_ID, EXEC dbo.UselessStoredProc @inputNum=Number_ID as ModifiedNumber 
FROM [TestDb].[dbo].[Numbers] 

procédure stockée ressemble à ceci et fonctionne si appelé séparément:

CREATE PROCEDURE dbo.UselessStoredProc @inputNum int 
AS 
SELECT 'lol my number is: ' + CONVERT(varchar(max), @inputNum) 
GO 

--TEST 
EXEC dbo.UselessStoredProc @inputNum=2; 

Je ne doivent exécuter le proc stocké, pas obtenir la valeur en ligne. Le code est juste un exemple.

Répondre

1

En convertissant votre procédure à une fonction table et en utilisant cross apply():

create function NotAProc (@inputNum int) returns table as 
return 
select ModifiedNumber = 'lol my number is: ' + CONVERT(varchar(max), @inputNum); 
go 

select Number_ID, tvf.ModifiedNumber 
from Numbers 
    cross apply NotAProc(Number_ID) as tvf 

rextester Démo: http://rextester.com/HCJZQ54253

retours:

+-----------+---------------------+ 
| Number_ID | ModifiedNumber | 
+-----------+---------------------+ 
|   0 | lol my number is: 0 | 
|   1 | lol my number is: 1 | 
|   2 | lol my number is: 2 | 
|   3 | lol my number is: 3 | 
|   4 | lol my number is: 4 | 
|   5 | lol my number is: 5 | 
|   6 | lol my number is: 6 | 
|   7 | lol my number is: 7 | 
|   8 | lol my number is: 8 | 
|   9 | lol my number is: 9 | 
+-----------+---------------------+ 

Référence:

+0

si je besoin de mon proc stocké pour appeler un proc stocké, par exemple exécuter un SQL dynamique pour obtenir la colonne de clé primaire d'une table, par ex. '' SELECT @Data_Table_Key = COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE O OBJ OBJECTPROPERTY (OBJECT_ID (CONSTRAINT_SCHEMA + ''. '' + QUOTENAME (CONSTRAINT_NAME)), '' IsPrimaryKey '') = 1 ET TABLE_NAME = '' '+ @Data_Table_Name +' ' '' 'C'est ma raison de ne pas utiliser une fonction. – VSO

+0

Je suppose que je ne comprends pas la fonction «table valorisée» - puis-je appeler des processus stockés? Pourtant, non, bon @SqlZim? – VSO

+1

@VSO Si vous exécutez SQL dynamique dans une procédure et que vous souhaitez parcourir un ensemble de valeurs et exécuter la procédure pour chaque valeur, c'est exactement ce que vous devez faire. Utilisez une boucle 'while', ou' cursor' pour exécuter la procédure stockée pour chaque valeur. - S'il vous plaît poster des exemples pertinents de code la prochaine fois – SqlZim