日期:2014-05-17  浏览次数:20662 次

相同表架构的数据库遍历操作的问题(在线急等,有答案立结)
我为表1建了个存储过程:如下
SELECT sysobjects.name FROM sysobjects WHERE xtype = 'u' and sysobjects.name like '%表%'
我用这个已经取得了这些表名(表架构相同):
表1
表2
表3
......
--对表1操作
select 字段1,字段2,字段3 from 表1
--对字段123进行运算
...
update 表1 set 字段1 =,字段2 =,字段3 =

然后我想要表2,表3等等也通用这个存储过程的表1操作段,也就是说把表1操作段作为循环块,请问该怎么办?
注,实际应用中用动态sql的话会非常麻烦,所以尽量不要用动态sql,要用其他办法
------解决方案--------------------
我这里有一个:为所有非系统数据库的所有表重建索引
思路差不多,你改一下吧。我就不写了。
DECLARE @Database VARCHAR(255)?? 
DECLARE @Table VARCHAR(255)? 
DECLARE @cmd NVARCHAR(500)? 
DECLARE @fillfactor INT
?
SET @fillfactor = 90 
?
DECLARE DatabaseCursor CURSOR
FOR
????SELECT? name
????FROM??? MASTER.dbo.sysdatabases
????WHERE?? name NOT IN ( 'master', 'msdb', 'tempdb', 'model', 'distribution' )
????ORDER BY 1? 
?
OPEN DatabaseCursor? 
?
FETCH NEXT FROM DatabaseCursor INTO @Database?
WHILE @@FETCH_STATUS = 0 
????BEGIN?
?
????????SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' + 
??table_name + '']'' as tableName FROM [' + @Database
????????????+ '].INFORMATION_SCHEMA.TABLES 
??WHERE table_type = ''BASE TABLE'''??
?
???-- create table cursor? 
????????EXEC (@cmd)? 
????????OPEN TableCursor?? 
?
????????FETCH NEXT FROM TableCursor INTO @Table??
????????WHILE @@FETCH_STATUS = 0 
????????????BEGIN??
?
????????????????IF ( @@MICROSOFTVERSION / POWER(2, 24) >= 9 ) 
????????????????????BEGIN
???????????-- SQL 2005 or higher command 
????????????????????????SET @cmd = 'ALTER INDEX ALL ON ' + @Table
????????????????????????????+ ' REBUILD WITH (FILLFACTOR = '
????????????????????????????+ CONVERT(VARCHAR(3), @fillfactor) + ')'
????????????????????????EXEC (@cmd) 
????????????????????END
????????????????ELSE
????????????????????BEGIN
??????????-- SQL 2000 command 
????????????????????????DBCC DBREINDEX(@Table,' ',@fillfactor)? 
????????????????????END
?
????????????????FETCH NEXT FROM TableCursor INTO @Table??
????????????END??
?
????????CLOSE TableCursor?? 
????????DEALLOCATE TableCursor? 
?
????????FETCH NEXT FROM DatabaseCursor INTO @Database?
????END?
CLOSE DatabaseCursor?? 
DEALLOCATE DatabaseCursor