2016-06-19 4 views
0

ストアドプロシージャから注文を行うにはどうすればよいですか?ストアドプロシージャからの注文

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 

私はこのエラーを取得する:

Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.dll Additional information: Incorrect syntax near the keyword 'WHERE'.

答えて

2

Order by句はwhere句の後でなければなりません。 また、ここには動的SQLは必要ありません。 ORDER BYWHERE句の後に行く

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 
0

を:あなたはこのようにそれを書くことができます。文字列を構成して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å[email protected] 
ORDER BY 
    ps.Mærket, 
    P.model 
関連する問題