Bonjour, j'ai une procédure de magasin, où je fais une requête sélectionnée. Je veux commander ceci par un paramètre externe.
i Publier un exemple minimal: P>
CREATE PROCEDURE [dbo].[up_missioni_get_data] @order VarChar(100) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT * from missioni ORDER BY ... END
3 Réponses :
Vous avez 2 options, utilisez une instruction de cas ou utilisez dynamique SQL
Ceci serait un exemple de la déclaration de cas p> et ce serait et Exemple de SQL dynamique P> CREATE TABLE #Table (
Col1 VARCHAR(10),
Col2 VARCHAR(10)
)
DECLARE @OrderBy VARCHAR(100)
SET @OrderBy = 'Col1'
DECLARE @SqlString NVARCHAR(MAX)
SELECT @SqlString = 'SELECT * FROM #Table ORDER BY ' + @OrderBy
EXEC(@Sqlstring)
DROP TABLE #Table
Si vous utilisez le cas / la méthode, il est très important que chaque colonne ait le même type de données. SQL évalue le type de données résultant d'un cas / une fois d'expression à la compilation et utilise la priorité de type de données pour déterminer le type de données de sortie. Essayez de mélanger une colonne entière avec une colonne DateTime et vous verrez ce que je veux dire.
Une autre option consiste à utiliser une expression pour la colonne que vous souhaitez trier.
DECLARE @OrderBy INT SET @OrderBy = 4 SELECT * FROM MySourceTable ORDER BY COL_NAME(OBJECT_ID('MySourceTable'), @OrderBy )
Pourquoi ne pas renvoyer un jeu de données non formé et trier les résultats dans le code?
Le paramètre externe que vous passez sera statique, alors comment pouvez-vous commander par elle?