gpt4 book ai didi

c# - 如何将字符串传入存储过程中的动态sql

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:15 25 4
gpt4 key购买 nike

到目前为止,我有一个像这样的 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# 程序来调用存储过程。但是,它因异常而中断:

An expression of non boolean type in a context where a condition is expected near 'ORDER'

我想我收到错误是因为字符串值在 @query 变量中没有正确连接或格式化。

乐于接受任何建议。

编辑:我的存储过程目前看起来像这样:

enter image description here

当我执行存储过程时,它返回了我想要的结果集,但它也显示了一条错误消息:

Must declare the scalar variable "@dsearchtrtype".

我尝试在 BEGIN 主体内声明它并将其声明为存储过程参数的一部分,但它仍然显示相同的消息。

最佳答案

学习在 sp_executesql 中使用参数。您可以为 @searchtrtype 执行此操作,但不能为 @orderbycondition 执行此操作:

SET @query =  N'
SELECT y.ID, y.STATUS,y.CONTROLID,y.TRCDE
FROM YTDTRNI y LEFT JOIN
VND v
ON y.COMNO = v.COMNO
WHERE TRCDE = @searchtrtype
ORDER BY @orderbycondition';

SET @query = REPLACE(@query, '@orderbycondition', @orderbycondition);

EXEC sp_executesql @query,
N'@searchtrtype NVARCHAR(255)', -- or whatever the right type is
@searchtrtype=@searchtrtype;

您不能传入标识符,只能传入值,因此这不适用于 @orderbycondition

关于c# - 如何将字符串传入存储过程中的动态sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51208351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com