if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_test]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_test]
GOCREATE PROCEDURE dbo.sp_test
@p1 varchar(50)=null,
@p2 varchar(30)=null,
@p3 varchar(30)=null
AS
DECLARE
@sql varchar(5000)
BEGIN
SET @sql =
' SELECT *
FROM testTable a
WHERE 1=1
' IF (@p1 IS NOT NULL)
BEGIN
SET @sql = @sql
+ ' AND a.field1=''' + @p1 + ''' '
END
IF (@p2 IS NOT NULL)
BEGIN
SET @sql = @sql
+ ' AND a.field2<=''' + @p2 + ''' '
END
IF (@p3 IS NOT NULL)
BEGIN
SET @sql = @sql
+ ' AND a.field3=''' + CONVERT(VARCHAR(10), @p3, 101) + ''' '
END
PRINT(@sql)
EXECUTE(@sql)
END
GO
drop procedure [dbo].[sp_test]
GOCREATE PROCEDURE dbo.sp_test
@p1 varchar(50)=null,
@p2 varchar(30)=null,
@p3 varchar(30)=null
AS
DECLARE
@sql varchar(5000)
BEGIN
SET @sql =
' SELECT *
FROM testTable a
WHERE 1=1
' IF (@p1 IS NOT NULL)
BEGIN
SET @sql = @sql
+ ' AND a.field1=''' + @p1 + ''' '
END
IF (@p2 IS NOT NULL)
BEGIN
SET @sql = @sql
+ ' AND a.field2<=''' + @p2 + ''' '
END
IF (@p3 IS NOT NULL)
BEGIN
SET @sql = @sql
+ ' AND a.field3=''' + CONVERT(VARCHAR(10), @p3, 101) + ''' '
END
PRINT(@sql)
EXECUTE(@sql)
END
GO
解决方案 »
- SQL SERVER2005小疑问
- 请教个链接服务器的问题
- 使用触发器
- 不允许对具有不止一条 SELECT 语句的远程存储过程或存储过程使用服务器游标
- 请教,SQL升级方案。
- 今天应骋的一道题,听都没听过……哪位兄弟知道啊?!~
- 原来没有自动的标识,现加了,但不能自动排序??
- ______安装SQL SERVER 的问题(很简单,来拿分)???
- 急死了,急死了,请大家一定要帮帮忙啊
- pb环境:数据窗口保存是总报update between retrieve and update错误,后来发现触发器中事务的问题,改了一个地方好了,但我糊涂了,详细
- 如何监测存储过程运行时占用的内存大小
- 一个字符串问题
生成组合条件的存储过程
*/
--创建得到组合条件的存储过程
create procedure test
@fd1 varchar(100),@value1 varchar(100)
,@fd2 varchar(100),@value2 varchar(100)
,@fd3 varchar(100),@value3 varchar(100)
,@fd4 varchar(100),@value4 varchar(100)
,@tj varchar(1000) output
as
select @tj='',@tj=@tj
+case isnull(@value1,'') when '' then ''
else ' and ['+@fd1+']='''+@value1+'''' end
+case isnull(@value2,'') when '' then ''
else ' and ['+@fd2+']='''+@value2+'''' end
+case isnull(@value3,'') when '' then ''
else ' and ['+@fd3+']='''+@value3+'''' end
+case isnull(@value4,'') when '' then ''
else ' and ['+@fd4+']='''+@value4+'''' end
if @tj<>''
set @tj=' where '+right(@tj,len(@tj)-5)
go--测试
declare @tj varchar(1000)
exec test '姓名','李XX'
,'职务',''
,'性别','男'
,'学历','本科'
,@tj output
print @tjgo
drop procedure test
+case isnull(@value1,'') when '' then ''
else ' and ['+@fd1+']='''+@value1+'''' end
什么意思 不懂
讲解一下 谢谢
什么意思?
@tj=@tj --@tj与后面的语句是一个整体
+
但是我怎么把它与select 联系起来的
如何使用它
from语句加在哪里