J'ai une procédure stockée qui fait cela …
CREATE PROCEDURE spGetRegion @postcode nvarchar(10) AS SELECT capt FROM REGION_DATA where POSTCODE = @postcode go
Cela signifie que je peux courir
exec spGetCounty @postcode = 'rh12'
et il returnne une zone, comme "sud-est"
Est-il possible d'inclure les résultats d'une procédure stockée comme celle-ci dans une instruction select. par exemple
SELECT FIRST_NAME , LAST_NAME , POSTCODE , << NEED TO INCLUDE RESULTS OF STORED PROCEDURE HERE PASSING IN POSTCODE FROM PEOPLE
Donc quelque chose comme
SELECT FIRST_NAME , LAST_NAME , POSTCODE , exec spGetCounty @postcode = 'rh12' << THIS BIT DOESN'T WORK !! FROM PEOPLE
des idées?
Au lieu d'une procédure stockée, pensez à utiliser une fonction scalaire:
CREATE FUNCTION spGetRegion ( @postcode nvarchar(10) ) RETURNS varchar(255) BEGIN DECLARE @capt varchar(255); SELECT @capt = capt FROM REGION_DATA where POSTCODE = @postcode; RETURN(@capt); END;
Ensuite, vous pouvez l'appeler comme:
SELECT FIRST_NAME, LAST_NAME, POSTCODE, dbo.spGetRegion('rh12'); FROM PEOPLE;
Vous devez créer une fonction
CREATE function spGetRegion ( @postcode nvarchar(10) ) RETURNS varchar(100) as begin SELECT capt FROM REGION_DATA where POSTCODE = @postcode end
et utilisez-le dans votre requête comme
SELECT FIRST_NAME , LAST_NAME , POSTCODE , dbo.spGetCounty('rh12') FROM PEOPLE
Non, vous ne pouvez pas utiliser la procédure stockée dans une instruction select.
Vous devez utiliser la fonction fonction- scaler définie par l'user.
CREATE FUNCTION [dbo].[ufnGetCounty] ( @postcode nvarchar(10) ) RETURNS VARCHAR(200) AS BEGIN DECLARE @capt VARCHAR(200) SELECT @capt = capt FROM REGION_DATA where POSTCODE = @postcode RETURN @capt END
et puis vous pouvez l'utiliser dans une déclaration comme celle-ci –
SELECT FIRST_NAME , LAST_NAME , POSTCODE , dbo.ufnGetCounty(postcode) FROM PEOPLE
Utiliser la vue ou la fonction définie par l'user en se référant aux liens ci-dessous
en utilisant la vue, http://msdn.microsoft.com/en-us/library/aa258253%28SQL.80%29.aspx
en utilisant la fonction définie par l'user http://msdn.microsoft.com/en-us/library/aa175085%28SQL.80%29.aspx
Une procédure peut renvoyer plusieurs sets de résultats, chacun avec son propre schéma. Il ne convient pas à l'utilisation dans une instruction SELECT.
ou bien, essayez quelque chose comme ci-dessous
SELECT * FROM OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters') WHERE somefield = anyvalue