SQL SERVER 2008的查询语句问题

2025-03-07 09:08:49
推荐回答(4个)
回答1:

先问一句,这1000来张表是不是名字都是以group开头的,是的话这样

 

先得创建一张结果表,方便你将来查数据

select id,name,sex,age,addr into result from group1 where 1<>1

然后执行这个过程

DECLARE c_cursor CURSOR FOR 
Select name From sysobjects where name like 'group%' order by name 
DECLARE @tablename varchar(100) 
DELCARE @sql varchar(max) into @tablename 
OPEN c_cursor 
FETCH NEXT FROM c_cursor  
WHILE @@FETCH_STATUS = 0 
BEGIN 
   set @sql='insert into result select id,name,sex,age,addr  from ' + @tablename + ' where name='王磊'' 
exec (@sql) 
   FETCH NEXT FROM c_cursor into @tablename 
END 
CLOSE c_cursor 
DEALLOCATE c_cursor

 

不过这执行过程中可能你机器会一直很卡,我直接你,查收吧,我怕有问题,你机器卡的问都问不了了

回答2:

写个游标循环取,加上输出表名,如果系统死机或者过慢就强制停止,下次从该表处接着查

declare @tbname varchar(200)
declare @sql nvarchar(2000)

declare cur cursor for
select a.name from sys.tables a,sys.columns b 
where a.object_id=b.object_id and b.name='name' order by a.name
open cur
fetch next from cur into @tbname
while @@fetch_status=0 begin
    print @tbname
    set @sql='select * from '+@tbname+' where name=''王磊'''
    exec(@sql)
fetch next from cur into @tbname
end

执行的时候把结果输出模式改成以文本格式显示,以免超过100个上限

或者直接把查询的结果都插入到一个表中统一查看也可

回答3:

create table tb1
(
id [int] IDENTITY (1, 1),
tbname varchar(100)
)

--- 把数据库的所有表名插入tb1表
insert tb1 (tbname)
select name from 数据库名称.dbo.sysobjects where xtype='u'

这样tb1表里面就有数据库名,列名。创建一个存储过程,循环搜索:
create PROCEDURE TESTPERCUDURE
AS
DECLARE @col INTEGER
DECLARE @colmax INTEGER
DECLARE @tablename varchar(100)
DECLARE @SQL AS VARCHAR(200)
BEGIN
SET @col=1
set @colmax = (select max(id) from tb1)
SET @tablename= ''
WHILE @col<=@colmax
begin
SET @tablename= (select tbname from tb1 where id = @col)
SET @SQL='select * FROM '+@tablename+' where name = '王磊' ---通过循环获取你的表名之后组装成SQL语句,然后执行.
EXECUTE sp_executesql @SQL
SET @col=@col+1
END
end

创建完存储过程后再执行存储过程
exec TESTPERCUDURE

你数据这么大,这个存储过程要执行很久的,好就采纳吧。

回答4:

用UNION连接
SELECT [ID]
,[NAME]
,[SEX]
,[Age]
,[ADDR]
FROM [Data].dbo.Group1
where NAME = '王磊'
UNION
SELECT [ID]
,[NAME]
,[SEX]
,[Age]
,[ADDR]
FROM [Data].dbo.Group1
where NAME = '王磊'