SQL表格7个字段,我想用一个对应有7个变量的存储过程来查找。当7个变量的某几个没有时也可以查找,怎么写

[复制链接]
查看11 | 回复2 | 2010-12-27 12:48:54 | 显示全部楼层 |阅读模式
SQL表格里有7个字段,我想用一个有相对应7个变量的存储过程来查找相关的数据。当7个变量的某一个或几个变量都不输入时就忽略这几个变量。可是SQL变量不能没有,怎么写存储过程或者怎么处理才能达到目的?谢谢。
补充3:如果字段[A]是datetime呢,查找一段时间之间的数据。我之前忘记提及[A]是datetime,@from和@to一定有值的。用二楼的方法结果Syntax error converting datetime from character string
CREATE PROCEDURE [dbo]. Table1_search
(@from datetime,
@to datetime,
@b char(100)='',
@c char(100)='')
AS
begin
declare @sql varchar(8000)

set @sql='SELECT * FROM [dbo].[Total] where 1=1' + 'and [InputDate] BETWEEN'''+@from+'''' +'and+'''+@to+''''
if (@b'')

set @sql=@sql+' and [B]='''+@b+''''
if (@c'')

set @sql=@sql+' and [C]='''+@c+''''
set @sql=@sql+' ORDER BY [A] '
exec(@sql)
end
GO
补充2:谢谢2楼的回答,
补充1:
过程是CREATE PROCEDURE [dbo]. Table1_search(@a nvarchar(100), @b nvarchar(100), @c nvarchar(100),@d nvarchar(100),@e nvarchar(100),@f nvarchar(100),@g nvarchar(100)) AS
SELECT * FROM [dbo].[Table1]
WHERE [A]=@a AND [B]=@b AND [C]=@c AND [D]=@d AND [E]=@e AND [F]=@f AND [G]=@g
ORDER BY [A]
GO
我想A,B没有值时也可查找。

回复

使用道具 举报

千问 | 2010-12-27 12:48:54 | 显示全部楼层
declare @sql nvarchar(2000)set @sql = 'select '+ stuff(isnull(','+@par1,'')+isnull(','+@par2,'')+...isnull(','+@par7,''),1,1,'')+' from tb'exec(@sql)一个道理,动态执行就可以了declare @sql nvarchar(2000)declare @where nvarchar(2000)set @where=N'where 1=1 'set @where=@where+ isnull('AND [a]='''+@a+'''','')+ isnull('AND ='''+@b
回复

使用道具 举报

千问 | 2010-12-27 12:48:54 | 显示全部楼层
CREATE PROCEDURE [dbo]. Table1_search(@a nvarchar(100)='', @b nvarchar(100)='', @c nvarchar(100)='',@d nvarchar(100)='',@e nvarchar(100)='',@f nvarchar(100)='',@g nva
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行