关闭页面特效

用游标实现查询当前服务器所有数据库所有表的SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
declare @name varchar(100)
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT Name FROM Master..SysDatabases
where name NOT IN ('master','model','msdb','tempdb') ) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @name  
WHILE @@FETCH_STATUS = 0
BEGIN
 
if exists(select 1 from  sysobjects where xtype='u' and name like '%qq%')
select name from sysobjects where xtype='u' and name like '%qq%'
FETCH NEXT FROM My_Cursor INTO @name
END
 
CLOSE MY_CURSOR
DEALLOCATE My_Cursor

  其中QQ可以替换成自己想要的条件哦

 

PS:有问题改了下还是不行,有知道的人吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
declare @name varchar(100)
declare @sql varchar(100)
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT Name FROM Master..SysDatabases
where name NOT IN ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB') ) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @name  
WHILE @@FETCH_STATUS = 0
BEGIN
 
select @sql='use '+@name
EXEC sp_sqlexec @Sql
--select @name from Master..SysDatabases
--if exists(select 1 from  sysobjects where xtype='u' )--
select * from sysobjects where xtype='u'-- and name like '%sys%'
FETCH NEXT FROM My_Cursor INTO @name
END
 
 
CLOSE MY_CURSOR
DEALLOCATE My_Cursor

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DECLARE @dbname VARCHAR(50);
DECLARE @i INT =1;
DECLARE @maxid INT=0;
CREATE TABLE #temp(
    id int Identity(1,1),
    dbname varchar(50)
)
DECLARE @sql VARCHAR(max)='';
INSERT INTO #temp
        (dbname )
SELECT NAME  FROM master.sys.SysDatabases where name NOT IN ('master','model','msdb','tempdb')
SELECT @maxid=MAX(id) FROM #temp
WHILE @i<@maxid
BEGIN
    DECLARE @db VARCHAR(50)='';
    SELECT @db=dbname FROM #temp WHERE id=@i
    PRINT @db
    IF @i<>1 AND  @i<>@maxid
    BEGIN
        SET @sql+=' UNION ALL'
    END
    SET @sql+=' SELECT * FROM '+@db+'.INFORMATION_SCHEMA.TABLES '
    SET  @i+=1;
END
DROP TABLE #temp
EXEC(@sql)

  经过千辛万苦,找到了方法,正确的方法如下:

1
2
3
4
5
6
7
sp_MSForEachDB @command1='USE ?;
  
SELECT o.name AS tablename,c.name AS columnname,t.name AS datatype, *
  FROM sys.[columns] AS c
INNER JOIN sys.objects AS o ON c.[object_id]=c.[object_id]
INNER JOIN sys.types AS t ON t.user_type_id=c.user_type_id
WHERE o.[type]=''U'''

  


__EOF__

作  者ღKawaii
出  处https://www.cnblogs.com/kmsfan/p/5239572.html
关于博主:一个普通的小码农,为了梦想奋斗
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   yangliwen  阅读(1504)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
0
0
关注
跳至底部
document.getElementById("homeTopTitle").innerText="ღKawaii";
点击右上角即可分享
微信分享提示