用游标循环得到库中某张表中的数据值,同时这些数据值为同一服务器中的数据库名称,想要循环打开这些库得到符合要求的数据。。
select * from P1.dbo.PigfoTable可以实现跨库查询,但是P1换成游标读取出来的@P变量就不行了。。
DECLARE @P VARCHAR(32),@selectSql VARCHAR(128)
SET @P='P1'
SET @selectSql =' select TOP 1 * from '+@P+'.dbo.PigfoTable'
EXEC(@selectSql)
弱弱地问一句,这个只显示“命令已成功完成”吗?不是把查询结果都显示出来吗?
DECLARE test_cursor CURSOR SCROLL FOR
SELECT PFDB_No FROM dbo.PFDBInfoTable
OPEN test_cursor
DECLARE @PFDBNo nchar(50)
WHILE @@FETCH_STATUS=0 BEGIN
FETCH NEXT FROM test_cursor INTO @PFDBNo
DECLARE @selectSql VARCHAR(128)
SET @selectSql =' select * from '+@PFDBNo+'.dbo.BarNoTable'
EXEC @selectSql
END
CLOSE test_cursor DEALLOCATE test_cursor
现在我这个没有错误了。。。但是我想要结果啊。。
大神,帮帮忙吧!
@马尔代夫_珍: 可以执行出结果啊, EXEC(@selectSql) ,记得把@selectSql变量声明到游标外面去。
谢谢!!
CREATE PROCEDURE A
AS BEGIN
DECLARE @selectSql VARCHAR(MAX)
DECLARE @sql VARCHAR(MAX)
DECLARE test_cursor CURSOR
READ_ONLY FOR
SELECT PFDB_No FROM dbo.PFDBInfoTable
OPEN test_cursor
DECLARE @PFDBNo nchar(50)
WHILE @@FETCH_STATUS=0
BEGIN
FETCH NEXT FROM test_cursor INTO @PFDBNo
SET @selectSql =' select * from '+@PFDBNo+'.dbo.BarNoTable'
SET @sql='CREATE VIEW dbo.V_AB AS select * from(select distinct Bar_Name as 栏名称 From @selectSql)'
END
CLOSE test_cursor
DEALLOCATE test_cursor
EXEC (@sql)
END
GO
大神,能帮忙看一下这个存储过程吗?是存储过程动态创建视图的问题
@马尔代夫_珍: 有啥问题吗,你需要将视图创建在不同的数据库里面?
不是的,是在同一服务器上跨库查询符合条件的数据,最后综合都显示出来 。因为是数据库的个数是变化的,(可能一个月或者是一年后会多出来一个数据库),这样的话,就是动态视图。
但是,就我现在的水平,我只能想这么多的程序了,语句没语法错误,就是显示“命令执行成功”,嘿嘿
我想要的视图出不来。。
@马尔代夫_珍: 这样,你先把拼接的要创建的视图的脚本打印出来,EXEC (@sql) 改为 print @sql ,单独拿出执行一下,看看SQL脚本是否有问题。你现在这个肯定是有错误的,把语句改好执行成功后,然后逆向思维去动态拼接语句。
@?,????: 谢谢,我再看看。。
你想一下,调用的有参数的方法的时候,参数传不传?
??
select * from [@P].dbo.PigfoTable,这个里面的[@P]已经是确定的了,是某一个已存在的数据库,完成这个数据库中的查询后,其[@P]要循环取值,然后再在下一个数据库中进行查询。。
我好像还是不明白你说的意思。。