在存储过程中动态生成 查询语句 的问题

ssuunnbbiirrdd 2005-07-27 05:34:00
有这样一个很简单的匹配查询:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER PROCEDURE dbo.Jn_News_SearchEnding
(
@Title Nvarchar(32),
@Name Nvarchar(16),
@AdUserId Int,
@AuditingId Int,
@Result Int OutPut
)
AS
SELECT * FROM News_View WHERE Title=@Title AND Name=@Name AND AdUserId=@AdUserId AND AuditingId=@AuditingId ORDER BY Id DESC

RETURN

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

现在的问题是: 如果传入的 参数(比如说@title)是 空值,那么,查询语句就去掉 title=@title这个条件,查询语句就变成了这样:

SELECT * FROM News_View WHERE AND Name=@Name AND AdUserId=@AdUserId AND AuditingId=@AuditingId ORDER BY Id DESC
这个存储过程怎么写??
...全文
77 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssuunnbbiirrdd 2005-07-27
  • 打赏
  • 举报
回复
thx!!已经在存储过程里面执行成功了,先给分 再研究!!!!
paoluo 2005-07-27
  • 打赏
  • 举报
回复
可以这么写。

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER PROCEDURE dbo.Jn_News_SearchEnding
(
@Title Nvarchar(32),
@Name Nvarchar(16),
@AdUserId Int,
@AuditingId Int,
@Result Int OutPut
)
AS
Declare @SWhere Varchar(1000)
Set @SWhere=IsNull(' And Title='''+@Title+'''','')+IsNull(' And Name='''+@Name+'''','')+IsNull(' And AdUserId='+Rtrim(@AdUserId),'')+IsNull(' And AuditingId='+Rtrim(@AuditingId),'')
EXEC('SELECT * FROM News_View WHERE 1=1 '+@SWhere+' ORDER BY Id DESC')
RETURN

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
ssuunnbbiirrdd 2005-07-27
  • 打赏
  • 举报
回复
不是这个意思,title只是我举的一个例子,
我的意思是 这个查询语句 根据传入的参数 是否为空 而动态生成,如果为空,那么就不要这个条件
phantomMan 2005-07-27
  • 打赏
  • 举报
回复
把查询语句改为:

SELECT * FROM News_View WHERE (@Title is null or Title=@Title) AND Name=@Name AND AdUserId=@AdUserId AND AuditingId=@AuditingId ORDER BY Id DESC

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧