从存储过程订购

时间:2016-06-19 12:46:05

标签: sql-server

如何通过存储过程执行订单?

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

我收到此错误:

  

抛出异常:System.Data.dll中的'System.Data.SqlClient.SqlException'   附加信息:关键字“WHERE”附近的语法不正确。

2 个答案:

答案 0 :(得分:2)

Order by子句必须在where子句之后。 此外,这里不需要动态sql。你可以这样写:

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

答案 1 :(得分:0)

ORDER BY位于WHERE子句之后。无需撰写字符串并将其传递给sp_executesql,只需将T-SQL代码写入过程即可。

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