惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
Spread Privacy
Spread Privacy
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
SecWiki News
SecWiki News
腾讯CDC
P
Privacy International News Feed
Webroot Blog
Webroot Blog
J
Java Code Geeks
爱范儿
爱范儿
A
About on SuperTechFans
S
Secure Thoughts
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
DataBreaches.Net
Cloudbric
Cloudbric
Security Archives - TechRepublic
Security Archives - TechRepublic
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Security Latest
Security Latest
Forbes - Security
Forbes - Security
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threatpost
量子位
MongoDB | Blog
MongoDB | Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Vercel News
Vercel News
Google Online Security Blog
Google Online Security Blog
云风的 BLOG
云风的 BLOG
GbyAI
GbyAI
S
Security @ Cisco Blogs
T
The Exploit Database - CXSecurity.com
Help Net Security
Help Net Security
V
Visual Studio Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 聂微东
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
Attack and Defense Labs
Attack and Defense Labs

博客园 - 徐一贺

java将读取到的西门子PLC中标签的二进制数组,根据标签数据类型,偏移长度解析其真实的值。 java读取西门子PLC标签为二进制的时根据标签数据类型传入二进制数组长度的判断。 Windows Server 与 Windows 10/11 官方安装系列号 WPF控件拖拽 从域名到IP地址:nslookup命令带你开启网络之旅 全国DNS服务器地址列举 Win系统端口被占用怎么办?解决方案就在这,速看! 博图VBS连接SQLServer 博图VBS修改SQLServer数据 C# 多点最小二乘法拟合平面算法 ping某个范围的IP地址 Android Studio 2021.3.1 阿里云盘分享地址 将WPF发布为exe安装包 C#中 一个多线程框架 程序员正确使用百度的方式 关于com.google.gson.JsonSyntaxException时间格式解析错误问题 SQL Server 查询数据库表结构 国内加速访问Github的办法,超级简单 全球IP地址查询网站 Halcon2019软件安装教程 转载自:https://blog.csdn.net/cashmood/article/details/105081705 SQL Server 跨服务器视图 idea快速开发插件
比较两个库的表信息
徐一贺 · 2020-05-30 · via 博客园 - 徐一贺

IF EXISTS ( SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[p_comparestructure]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
DROP PROCEDURE [dbo].[p_comparestructure]
GO

/*--比较两个数据库的表结构差异 --*/

/*--调用示例
exec p_comparestructure 'DBName1','DBName2'
--*/

exec p_comparestructure 'mms_db','[mms_db50.2]'
ALTER PROC p_comparestructure
@dbname1 VARCHAR(250) ,--要比较的数据库名1
@dbname2 VARCHAR(250)--要比较的数据库名2
AS
CREATE TABLE #tb1
(
表名1 VARCHAR(250) ,
字段名 VARCHAR(250) ,
序号 INT ,
标识 BIT ,
主键 BIT ,
类型 VARCHAR(250) ,
占用字节数 INT ,
长度 INT ,
小数位数 INT ,
允许空 BIT ,
默认值 SQL_VARIANT --,
--字段说明 SQL_VARIANT
)

CREATE TABLE #tb2
(
表名2 VARCHAR(250) ,
字段名 VARCHAR(250) ,
序号 INT ,
标识 BIT ,
主键 BIT ,
类型 VARCHAR(250) ,
占用字节数 INT ,
长度 INT ,
小数位数 INT ,
允许空 BIT ,
默认值 SQL_VARIANT --,
--字段说明 SQL_VARIANT
)

--得到数据库1的结构
EXEC('insert into #tb1 SELECT
表名=d.name,字段名=a.name,序号=a.colid,
标识=case when a.status=0x80 then 1 else 0 end,
主键=case when exists(SELECT 1 FROM '+@dbname1+'..sysobjects where xtype=''PK'' and parent_obj=a.id and name in (
SELECT name FROM '+@dbname1+'..sysindexes WHERE indid in(
SELECT indid FROM '+@dbname1+'..sysindexkeys WHERE id = a.id AND colid=a.colid
))) then 1 else 0 end,
类型=b.name,占用字节数=a.length,长度=a.prec,小数位数=a.scale,允许空=a.isnullable,
默认值=isnull(e.text,'''')
FROM '+@dbname1+'..syscolumns a
left join '+@dbname1+'..systypes b on a.xtype=b.xusertype
inner join '+@dbname1+'..sysobjects d on a.id=d.id and d.xtype=''U'' and d.name <>''dtproperties''
left join '+@dbname1+'..syscomments e on a.cdefault=e.id
order by a.id,a.colorder')

--得到数据库2的结构
EXEC('insert into #tb2 SELECT
表名=d.name,字段名=a.name,序号=a.colid,
标识=case when a.status=0x80 then 1 else 0 end,
主键=case when exists(SELECT 1 FROM '+@dbname2+'..sysobjects where xtype=''PK'' and parent_obj=a.id and name in (
SELECT name FROM '+@dbname2+'..sysindexes WHERE indid in(
SELECT indid FROM '+@dbname2+'..sysindexkeys WHERE id = a.id AND colid=a.colid
))) then 1 else 0 end,
类型=b.name,占用字节数=a.length,长度=a.prec,小数位数=a.scale,允许空=a.isnullable,
默认值=isnull(e.text,'''')
FROM '+@dbname2+'..syscolumns a
left join '+@dbname2+'..systypes b on a.xtype=b.xusertype
inner join '+@dbname2+'..sysobjects d on a.id=d.id and d.xtype=''U'' and d.name <>''dtproperties''
left join '+@dbname2+'..syscomments e on a.cdefault=e.id
order by a.id,a.colorder')
--and not exists(select 1 from #tb2 where 表名2=a.表名1)
SELECT 比较结果 = CASE WHEN a.表名1 IS NULL
AND b.序号 = 1 THEN '库1缺少表:' + b.表名2
WHEN b.表名2 IS NULL
AND a.序号 = 1 THEN '库2缺少表:' + a.表名1
WHEN a.字段名 IS NULL
AND EXISTS ( SELECT 1
FROM #tb1
WHERE 表名1 = b.表名2 )
THEN '库1 [' + b.表名2 + '] 缺少字段:' + b.字段名
WHEN b.字段名 IS NULL
AND EXISTS ( SELECT 1
FROM #tb2
WHERE 表名2 = a.表名1 )
THEN '库2 [' + a.表名1 + '] 缺少字段:' + a.字段名
WHEN a.标识 <> b.标识 THEN '标识不同'
WHEN a.主键 <> b.主键 THEN '主键设置不同'
WHEN a.类型 <> b.类型 THEN '字段类型不同'
WHEN a.占用字节数 <> b.占用字节数 THEN '占用字节数'
WHEN a.长度 <> b.长度 THEN '长度不同'
WHEN a.小数位数 <> b.小数位数 THEN '小数位数不同'
WHEN a.允许空 <> b.允许空 THEN '是否允许空不同'
WHEN a.默认值 <> b.默认值 THEN '默认值不同'
--WHEN a.字段说明 <> b.字段说明 THEN '字段说明不同'
ELSE ''
END ,
*
FROM #tb1 a
FULL JOIN #tb2 b ON a.表名1 = b.表名2
AND a.字段名 = b.字段名
WHERE a.表名1 IS NULL
OR a.字段名 IS NULL
OR b.表名2 IS NULL
OR b.字段名 IS NULL
OR a.标识 <> b.标识
OR a.主键 <> b.主键
OR a.类型 <> b.类型
OR a.占用字节数 <> b.占用字节数
OR a.长度 <> b.长度
OR a.小数位数 <> b.小数位数
OR a.允许空 <> b.允许空
OR a.默认值 <> b.默认值
--OR a.字段说明 <> b.字段说明
ORDER BY ISNULL(a.表名1, b.表名2) ,
ISNULL(a.序号, b.序号)--isnull(a.字段名,b.字段名)
go