【发布时间】:2018-07-06 10:27:32
【问题描述】:
到目前为止,我有一个这样的 SQL 语句:
SELECT
y.ID, y.STATUS, y.CONTROLID, y.TRCDE
FROM
YTDTRNI AS y
LEFT JOIN
VND AS v ON y.COMNO = v.COMNO
WHERE
TRCDE ='RC'
ORDER BY
ID DESC
我正在尝试在使用动态 SQL 的存储过程中使用此查询。到目前为止,我的存储过程如下所示:
SET @query = N'SELECT y.ID, y.STATUS, y.CONTROLID, y.TRCDE
FROM YTDTRNI AS y LEFT JOIN VND AS v ON y.COMNO = v.COMNO
WHERE TRCDE = ' + @searchtrtype + '
ORDER BY ' + @orderbycondition
变量@searchtrtype 和@orderbycondition 的类型为nvarchar。
我正在使用 ASP.NET/C# 程序来调用存储过程。但是,它打破了一个例外:
在“ORDER”附近预期条件的上下文中的非布尔类型表达式
我认为我收到了错误,因为@query 变量中的字符串值未正确连接或格式化。
愿意接受任何建议。
编辑:我的存储过程现在看起来像这样:
当我执行存储过程时,它会返回我想要的结果集,但它也会显示一条错误消息:
必须声明标量变量“@dsearchtrtype”。
我尝试在 BEGIN 正文中声明它并将其声明为存储过程参数的一部分,但它仍然显示相同的消息。
【问题讨论】:
-
你有没有遗漏撇号?
-
你能显示变量声明吗?还是完整的存储过程代码?
-
小心SQL注入
标签: c# sql sql-server validation stored-procedures