首页 新闻 会员 周边

SQL中游标问题

0
悬赏园豆:10 [已解决问题] 解决于 2015-02-26 19:43

用游标循环得到库中某张表中的数据值,同时这些数据值为同一服务器中的数据库名称,想要循环打开这些库得到符合要求的数据。。

select * from P1.dbo.PigfoTable可以实现跨库查询,但是P1换成游标读取出来的@P变量就不行了。。

select * from [@P].dbo.PigfoTable,有错误,说[@P].dbo.PigfoTable无效。
想得是,是不是需要用SQL语句说明一下,得到的@P变量为数据库名?
 
请求大神指点指点。。
马尔代夫_珍的主页 马尔代夫_珍 | 初学一级 | 园豆:195
提问于:2015-02-26 16:40
< >
分享
最佳答案
0

DECLARE @P VARCHAR(32),@selectSql VARCHAR(128)
SET @P='P1'
SET @selectSql =' select TOP 1 * from '+@P+'.dbo.PigfoTable'
EXEC(@selectSql)

收获园豆:10
KingMi | 小虾三级 |园豆:1344 | 2015-02-26 17:38

弱弱地问一句,这个只显示“命令已成功完成”吗?不是把查询结果都显示出来吗?

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

 

现在我这个没有错误了。。。但是我想要结果啊。。

大神,帮帮忙吧!

马尔代夫_珍 | 园豆:195 (初学一级) | 2015-02-26 17:53

@马尔代夫_珍: 可以执行出结果啊, EXEC(@selectSql) ,记得把@selectSql变量声明到游标外面去。

KingMi | 园豆:1344 (小虾三级) | 2015-02-26 17:59

谢谢!!

马尔代夫_珍 | 园豆:195 (初学一级) | 2015-02-26 19:43

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

大神,能帮忙看一下这个存储过程吗?是存储过程动态创建视图的问题

马尔代夫_珍 | 园豆:195 (初学一级) | 2015-02-27 15:46

@马尔代夫_珍: 有啥问题吗,你需要将视图创建在不同的数据库里面?

KingMi | 园豆:1344 (小虾三级) | 2015-02-27 16:16

不是的,是在同一服务器上跨库查询符合条件的数据,最后综合都显示出来 。因为是数据库的个数是变化的,(可能一个月或者是一年后会多出来一个数据库),这样的话,就是动态视图。

但是,就我现在的水平,我只能想这么多的程序了,语句没语法错误,就是显示“命令执行成功”,嘿嘿

我想要的视图出不来。。

马尔代夫_珍 | 园豆:195 (初学一级) | 2015-02-27 16:21

@马尔代夫_珍: 这样,你先把拼接的要创建的视图的脚本打印出来,EXEC (@sql) 改为 print @sql ,单独拿出执行一下,看看SQL脚本是否有问题。你现在这个肯定是有错误的,把语句改好执行成功后,然后逆向思维去动态拼接语句。

KingMi | 园豆:1344 (小虾三级) | 2015-02-27 16:35

@?,????: 谢谢,我再看看。。

马尔代夫_珍 | 园豆:195 (初学一级) | 2015-02-27 17:05
其他回答(1)
0

你想一下,调用的有参数的方法的时候,参数传不传?

_Vegetables | 园豆:586 (小虾三级) | 2015-02-26 17:20

??

select * from [@P].dbo.PigfoTable,这个里面的[@P]已经是确定的了,是某一个已存在的数据库,完成这个数据库中的查询后,其[@P]要循环取值,然后再在下一个数据库中进行查询。。

我好像还是不明白你说的意思。。

支持(0) 反对(0) 马尔代夫_珍 | 园豆:195 (初学一级) | 2015-02-26 17:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册