取数据库名称和所有者的游标
浪潮的数据库不能直接使用sa操作,必须使用软件建立的9999用户或者在表名成前面加上所有者。
这样出现了问题,多个数据库,每次在查询分析器中执行语句都要使用每个数据库的9999登陆。
很麻烦。
浪潮的数据库使用cwbase开头,后边是一个流水号。比如cebase0001,他的所有者是lc0001999。那么我们可以从sysdatabases中取出数据库名称,再取出数据库名称后边的流水号加上lc在加上9999作为所有者。这样我们可以以windows身份认证登陆,在master下边执行sql语句。
DECLARE @database varchar(30)
DECLARE authors_cursor CURSOR FOR
select name
from sysdatabases
where name like 'cwbase%' --查找属于浪潮软件的数据库
OPEN authors_cursor
FETCH NEXT FROM authors_cursor
INTO @database
WHILE @@FETCH_STATUS = 0
begin
DECLARE @id varchar(30) --存放流水号
DECLARE @sql nvarchar(100)
set @id=right(@database,4) --看你的流水号是几位后边的数字就是几。
set @sql='select * from '+@database+'.lc'+@id+'9999. '+'Goodsmovement'
--组装sql语句,比如查询出入库单据。等价于 select * from cwbase0001.lc00019999.goodsmovement
exec sp_executesql @Sql --执行上边sql语句
FETCH NEXT FROM authors_cursor
INTO @database --执行下个数据库的查询操作
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
go
这篇文章不单是这对浪潮数据库,其实对学习sql语言很有帮助.