SQL 存储过程实现 多表关键字模糊查询
用asp.net开发的网页,网页有sql后台数据库支持,数据库下设多个表。要求用sql语句开发一个搜索的存储过程,存储过程有表名,列名,关键字三个参数,搜索的关键字不能为...
用asp.net开发的网页,网页有sql后台数据库支持,数据库下设多个表。要求用sql语句开发一个搜索的存储过程,存储过程有 表名,列名,关键字三个参数,搜索的关键字不能为空。
1.当参数 表名为空的时候,输出每个表查得的数据总条数便可(遍历所有的表的所有列);
2.当参数 表名不为空时要求输出指定查询的表中的所有查询结果(遍历单表);
3.当参数 表名 列名不为空的时候,进行精确查询。。
谢谢~~项目开发急用,自己的分不多还请大家理解。。 展开
1.当参数 表名为空的时候,输出每个表查得的数据总条数便可(遍历所有的表的所有列);
2.当参数 表名不为空时要求输出指定查询的表中的所有查询结果(遍历单表);
3.当参数 表名 列名不为空的时候,进行精确查询。。
谢谢~~项目开发急用,自己的分不多还请大家理解。。 展开
1个回答
展开全部
用游标在sysobjects里面取表名,xtype='U'表示为表。根据实际需要加where条件
create procedure proc_query
(@table_name nvarchar(100)=N''
,@col_name nvarchar(200)=N''--@col_name 格式为col1,col2,col3
)
as
begin
declare @sql nvarchar(2000);
create table #table(table_name nvarchar(100),num_count int);
--列名空,表名有
if ( @col_name =N''and @table_name <>N'')
begin
set @sql='select * from '+@table_name;
exec sp_executesql @sql;
end
--表名空
if (@table_name =N'')
begin
DECLARE tableCursor CURSOR FOR
select name from sysobjects where xtype='U'
OPEN tableCursor
FETCH NEXT FROM tableCursor
INTO @table_name
WHILE @@FETCH_STATUS=0
BEGIN
set @sql='insert into #table select '''+@table_name+''',count(*) from '+@table_name;
exec sp_executesql @sql;
FETCH NEXT FROM tableCursor
INTO @table_name
END
close tableCursor
deallocate tableCursor
select * from #table
drop table #table
end
--列名有,表名有
if (@table_name <>N'' and @col_name <>N'' )
begin
set @sql='select '+@col_name+' from '+@table_name;
exec sp_executesql @sql;
end
end
create procedure proc_query
(@table_name nvarchar(100)=N''
,@col_name nvarchar(200)=N''--@col_name 格式为col1,col2,col3
)
as
begin
declare @sql nvarchar(2000);
create table #table(table_name nvarchar(100),num_count int);
--列名空,表名有
if ( @col_name =N''and @table_name <>N'')
begin
set @sql='select * from '+@table_name;
exec sp_executesql @sql;
end
--表名空
if (@table_name =N'')
begin
DECLARE tableCursor CURSOR FOR
select name from sysobjects where xtype='U'
OPEN tableCursor
FETCH NEXT FROM tableCursor
INTO @table_name
WHILE @@FETCH_STATUS=0
BEGIN
set @sql='insert into #table select '''+@table_name+''',count(*) from '+@table_name;
exec sp_executesql @sql;
FETCH NEXT FROM tableCursor
INTO @table_name
END
close tableCursor
deallocate tableCursor
select * from #table
drop table #table
end
--列名有,表名有
if (@table_name <>N'' and @col_name <>N'' )
begin
set @sql='select '+@col_name+' from '+@table_name;
exec sp_executesql @sql;
end
end
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询