部分参数调用存储过程怎么实现?

yhui1989love 2011-10-17 09:13:17
假如:
一个存储过程有4个参数,这4个参数在存储过程的WHERE子句中当做了条件
现在我想当我在调用时填两个参数,使查询的条件少两个,让结果更多不能给参数赋默认值,赋值后此参数对应的条件有效,达不到想要的结果
应该怎么实现?
求指导!
...全文
77 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yhui1989love 的回复:]

SQL code
EXEC('select * from TableName '+@andWhere)

只是执行生成的语句
你说如果条件是不同表中的话适合拼凑,以上TableName应该可以有好几个表吧?这样在SQL中木有看到过 程序中见过 感觉比较麻烦 我一般式直接做连接之后加条件 不知道你这样做的好处在哪里哦 请赐教啊
还有个疑问 这样的方法怎么调用存储过程?
[/Quote]

可以的
列如:以下就是判斷參數是否存在,存在時生成對應的條件
IF @Parameter1 IS NOT NULL
SET @andWhere=' and Col1='''+@Parameter1+''''
yhui1989love 2011-10-17
  • 打赏
  • 举报
回复
EXEC('select * from TableName '+@andWhere) 

只是执行生成的语句
你说如果条件是不同表中的话适合拼凑,以上TableName应该可以有好几个表吧?这样在SQL中木有看到过 程序中见过 感觉比较麻烦 我一般式直接做连接之后加条件 不知道你这样做的好处在哪里哦 请赐教啊
还有个疑问 这样的方法怎么调用存储过程?
中国风 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yhui1989love 的回复:]

引用 4 楼 roy_88 的回复:
SQL code

USE tempdb
GO

IF OBJECT_ID('P1'.'P') IS NOT NULL
DROP PROCEDURE P1
GO
CREATE PROCEDURE P1(
@Parameter1 NVARCHAR(50),
@Parameter2 NVARCHAR(50),
@Parameter3 NV……
[/Quote]
是把生成的語句,執行
yhui1989love 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 roy_88 的回复:]
SQL code

USE tempdb
GO

IF OBJECT_ID('P1'.'P') IS NOT NULL
DROP PROCEDURE P1
GO
CREATE PROCEDURE P1(
@Parameter1 NVARCHAR(50),
@Parameter2 NVARCHAR(50),
@Parameter3 NVARCHA……
[/Quote]
EXEC('select * from TableName '+@andWhere) 
这句怎么理解?
EXEC 调用的是什么啊?
yhui1989love 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nbdba 的回复:]
SQL code

create proc pr_test
@p1 int = null
,@p2 int = null
,@p3 varchar(10) = null
,@p4 varchar(10) = null
as

select *
from test
where (@p1 is null or f1=@p1)
and (@p2 is null or f2=@p2……
[/Quote]
初始值赋空,在条件里加个OR 是这么做的
调用时不输入参数会报错
过程或函数 'ASP_GetInventoryAge' 需要参数 '@brand',但未提供该参数。 Severity 16 State 4
中国风 2011-10-17
  • 打赏
  • 举报
回复
USE tempdb
GO

IF OBJECT_ID('P1'.'P') IS NOT NULL
DROP PROCEDURE P1
GO
CREATE PROCEDURE P1(
@Parameter1 NVARCHAR(50),
@Parameter2 NVARCHAR(50),
@Parameter3 NVARCHAR(50),
@Parameter4 NVARCHAR(50)
)
AS
DECLARE @andWhere NVARCHAR(2000)
SET @andWhere=' where 1=1 '

IF @Parameter1 IS NOT NULL
SET @andWhere=' and Col1='''+@Parameter1+''''
IF @Parameter2 IS NOT NULL
SET @andWhere=' and Col2='''+@Parameter2+''''
IF @Parameter3 IS NOT NULL
SET @andWhere=' and Col3='''+@Parameter3+''''
IF @Parameter4 IS NOT NULL
SET @andWhere=' and Col4='''+@Parameter4+''''
EXEC('select * from TableName '+@andWhere)
中国风 2011-10-17
  • 打赏
  • 举报
回复
條件不是在同一個表時,建議用拼湊
--小F-- 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nbdba 的回复:]
SQL code
create proc pr_test
@p1 int = null
,@p2 int = null
,@p3 varchar(10) = null
,@p4 varchar(10) = null
as

select *
from test
where (@p1 is null or f1=@p1)
and (@p2 is null or f2=@p2)
……
[/Quote]
++就是动态拼接
NBDBA 2011-10-17
  • 打赏
  • 举报
回复
create proc pr_test
@p1 int = null
,@p2 int = null
,@p3 varchar(10) = null
,@p4 varchar(10) = null
as

select *
from test
where (@p1 is null or f1=@p1)
and (@p2 is null or f2=@p2)
and (@p3 is null or f3=@p3)
and (@p4 is null or f4=@p4)

go

--调用
exec pr_test 1,1,'2','2'
go

exec pr_test 1,1
go

exec pr_test @p1=1,@p3='2'
go

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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