如何在不同的数据库中执行同一段代码

liyaohui13098452233 2017-11-14 01:40:36

DECLARE cus_dbname CURSOR FOR SELECT dbname from b_customer
OPEN cus_dbname
declare @dbname varchar(10)
FETCH cus_dbname INTO @dbname
begin
use @dbname
select 1
end
FETCH cus_dbname INTO @dbname
CLOSE cus_dbname
DEALLOCATE cus_dbname


以上一是'@dbname' 附近有语法错误。

查询出服务器上有那些数据库,然后对应的数据库执行同一段代码,该如何写
...全文
174 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
日月路明 2017-11-14
  • 打赏
  • 举报
回复
只能用动态sql完成
吉普赛的歌 版主 2017-11-14
  • 打赏
  • 举报
回复
--举例:显示所有非系统库中的表的个数
EXEC sp_MSforeachdb 'if "?" not in ("tempdb","master","model","msdb") select "?" as dbName, count(1) as cnt from ?.sys.tables'
吉普赛的歌 版主 2017-11-14
  • 打赏
  • 举报
回复
--举例:显示所有非系统库的每一个用户库中的表的个数
EXEC sp_MSforeachdb 'if "?" not in ("tempdb","master","model","msdb") select count(1) as cnt from ?.sys.tables'
听雨停了 2017-11-14
  • 打赏
  • 举报
回复
引用 4 楼 liyaohui13098452233 的回复:
又提示这个'go' 附近有语法错误。
把go;去掉

SET @sql = 'use ' + @dbname + '; '+
   'select 1'
  • 打赏
  • 举报
回复
又提示这个'go' 附近有语法错误。
听雨停了 2017-11-14
  • 打赏
  • 举报
回复
引用 2 楼 liyaohui13098452233 的回复:
[quote=引用 1 楼 qq_37170555 的回复:] [quote=引用 楼主 liyaohui13098452233 的回复:]

DECLARE cus_dbname CURSOR FOR SELECT  dbname from b_customer
OPEN cus_dbname    
declare @dbname varchar(10)
FETCH cus_dbname INTO @dbname
begin 
	use @dbname
	select 1
end 
FETCH cus_dbname INTO @dbname
CLOSE cus_dbname    
DEALLOCATE cus_dbname    

以上一是'@dbname' 附近有语法错误。 查询出服务器上有那些数据库,然后对应的数据库执行同一段代码,该如何写

DECLARE cus_dbname CURSOR FOR SELECT  dbname from b_customer
OPEN cus_dbname    
declare @dbname varchar(10)
FETCH NEXT FROM cus_dbname INTO @dbname
WHILE @@FETCH_STATUS=0
begin 
	use @dbname
	select 1
	FETCH NEXT FROM cus_dbname INTO @dbname
end 
CLOSE cus_dbname    
DEALLOCATE cus_dbname    
语法有错误,游标应该这样写[/quote] 还是提示'@dbname' 附近有语法错误。[/quote]

DECLARE cus_dbname CURSOR FOR SELECT  dbname from b_customer
OPEN cus_dbname    
declare @dbname varchar(10),@sql VARCHAR(max)
FETCH NEXT FROM cus_dbname INTO @dbname
WHILE @@FETCH_STATUS=0
begin 
	SET @sql = 'use ' + @dbname + ';
	go;
	select 1'
	exce (@sql)
	FETCH NEXT FROM cus_dbname INTO @dbname
end 
CLOSE cus_dbname    
DEALLOCATE cus_dbname    
只能写成动态sql来执行,直接这样use @dbname不行的
  • 打赏
  • 举报
回复
引用 1 楼 qq_37170555 的回复:
[quote=引用 楼主 liyaohui13098452233 的回复:]

DECLARE cus_dbname CURSOR FOR SELECT  dbname from b_customer
OPEN cus_dbname    
declare @dbname varchar(10)
FETCH cus_dbname INTO @dbname
begin 
	use @dbname
	select 1
end 
FETCH cus_dbname INTO @dbname
CLOSE cus_dbname    
DEALLOCATE cus_dbname    

以上一是'@dbname' 附近有语法错误。 查询出服务器上有那些数据库,然后对应的数据库执行同一段代码,该如何写

DECLARE cus_dbname CURSOR FOR SELECT  dbname from b_customer
OPEN cus_dbname    
declare @dbname varchar(10)
FETCH NEXT FROM cus_dbname INTO @dbname
WHILE @@FETCH_STATUS=0
begin 
	use @dbname
	select 1
	FETCH NEXT FROM cus_dbname INTO @dbname
end 
CLOSE cus_dbname    
DEALLOCATE cus_dbname    
语法有错误,游标应该这样写[/quote] 还是提示'@dbname' 附近有语法错误。
听雨停了 2017-11-14
  • 打赏
  • 举报
回复
引用 楼主 liyaohui13098452233 的回复:

DECLARE cus_dbname CURSOR FOR SELECT  dbname from b_customer
OPEN cus_dbname    
declare @dbname varchar(10)
FETCH cus_dbname INTO @dbname
begin 
	use @dbname
	select 1
end 
FETCH cus_dbname INTO @dbname
CLOSE cus_dbname    
DEALLOCATE cus_dbname    

以上一是'@dbname' 附近有语法错误。 查询出服务器上有那些数据库,然后对应的数据库执行同一段代码,该如何写

DECLARE cus_dbname CURSOR FOR SELECT  dbname from b_customer
OPEN cus_dbname    
declare @dbname varchar(10)
FETCH NEXT FROM cus_dbname INTO @dbname
WHILE @@FETCH_STATUS=0
begin 
	use @dbname
	select 1
	FETCH NEXT FROM cus_dbname INTO @dbname
end 
CLOSE cus_dbname    
DEALLOCATE cus_dbname    
语法有错误,游标应该这样写

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧