如何通过存储过程执行订单?
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”附近的语法不正确。
答案 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