Reputation: 427
How do I do a order by from my stored procedure?
ALTER PROCEDURE [Data].[filtering_param]
@param1 NVARCHAR(1000) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql Nvarchar(MAX);
SET @Sql = N'SELECT
ps.Mærket AS Mærke, P.DataID,
PS.Billed, P.Model, P.vendor,
P.Årgang, P.[Motor Type],
P.Krydsmålet, P.Centerhul,
P.ET, P.Bolter, P.Dæk, P.Fælge, PS.Krydsmålene
FROM
Data.Hjuldata P
INNER JOIN
Data.Mærke PS ON P.MærkeID = PS.MærkeID
ORDER BY
ps.Mærket, P.model
WHERE 1 = 1 '
+ CASE WHEN @param1 IS NOT NULL
THEN N' AND Krydsmålet = @param1 ' ELSE N'' END
EXEC sp_executesql @Sql, N'@param1 NVARCHAR(1000)', @param1
END
I get this error:
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.dll Additional information: Incorrect syntax near the keyword 'WHERE'.
Upvotes: 0
Views: 41
Reputation: 8725
The ORDER BY
goes after the WHERE
clause. There is no need to compose a string and pass it to sp_executesql
, just write the T-SQL code into the procedure.
ALTER PROCEDURE [Data].[filtering_param]
@param1 nvarchar(1000)=NULL
AS
SET NOCOUNT ON
SELECT
ps.Mærket AS Mærke,
P.DataID,
PS.Billed,
P.Model,
P.vendor,
P.Årgang,
P.[Motor Type],
P.Krydsmålet,
P.Centerhul,
P.ET,
P.Bolter,
P.Dæk,
P.Fælge,
PS.Krydsmålene
FROM Data.Hjuldata P
INNER JOIN Data.Mærke PS ON P.MærkeID=PS.MærkeID
WHERE @param1 IS NULL OR Krydsmålet=@param1
ORDER BY
ps.Mærket,
P.model
Upvotes: 0
Reputation: 82524
The Order by
clause must be after the where
clause.
Also, there is no need for dynamic sql here. You can write it like this:
Select ps.Mærket AS Mærke
, P.DataID
, PS.Billed
, P.Model
, P.vendor
, P.Årgang
, P.[Motor Type]
, P.Krydsmålet
, P.Centerhul
, P.ET
, P.Bolter
, P.Dæk
, P.Fælge
, PS.Krydsmålene
from Data.Hjuldata P
inner join Data.Mærke PS on P.MærkeID = PS.MærkeID
WHERE @param1 IS NULL
OR Krydsmålet = @param1
ORDER BY ps.Mærket, P.model
Upvotes: 2