查询新数据库与原数据库列名是否相同

DECLARE @ODB_NAME NVARCHAR(100),@SQLSTRING NVARCHAR(4000)
SET @ODB_NAME ='EDB_NAME'
SET @SQLSTRING='DECLARE @ODB_NAME NVARCHAR(100),@ODIS_COUNT INT,@NDIS_COUNT INT '
SET @SQLSTRING=@SQLSTRING+'SELECT @ODIS_COUNT=COUNT(NAME) FROM [@]..SYSOBJECTS WHERE TYPE=''U'' '
SET @SQLSTRING=@SQLSTRING+'AND NAME NOT IN (SELECT NAME FROM SYSOBJECTS WHERE TYPE=''U'') '
SET @SQLSTRING=@SQLSTRING+'SELECT @NDIS_COUNT=COUNT(NAME) FROM SYSOBJECTS WHERE TYPE=''U'' '
SET @SQLSTRING=@SQLSTRING+'AND NAME NOT IN (SELECT NAME FROM [@]..SYSOBJECTS WHERE TYPE=''U'') '
SET @SQLSTRING=@SQLSTRING+'IF((@ODIS_COUNT+@NDIS_COUNT)=0) '
SET @SQLSTRING=@SQLSTRING+'BEGIN '
SET @SQLSTRING=@SQLSTRING+'PRINT ''表名是否对应:是'' '
SET @SQLSTRING=@SQLSTRING+'SELECT @ODIS_COUNT=COUNT(C.ID) FROM [@]..SYSCOLUMNS AS C LEFT JOIN [@]..SYSOBJECTS AS O ON O.ID=C.ID '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN SYSOBJECTS AS LO ON LO.NAME=O.NAME '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN SYSCOLUMNS AS LC ON LC.ID=LO.ID AND LC.NAME=C.NAME WHERE O.TYPE=''U'' AND LC.NAME IS NULL '
SET @SQLSTRING=@SQLSTRING+'SELECT @NDIS_COUNT=COUNT(C.ID) FROM SYSCOLUMNS AS C LEFT JOIN SYSOBJECTS AS O ON O.ID=C.ID '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN [@]..SYSOBJECTS AS LO ON LO.NAME=O.NAME '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN [@]..SYSCOLUMNS AS LC ON LC.ID=LO.ID AND LC.NAME=C.NAME WHERE O.TYPE=''U'' AND LC.NAME IS NULL  '
SET @SQLSTRING=@SQLSTRING+'IF((@ODIS_COUNT+@NDIS_COUNT)=0) '
SET @SQLSTRING=@SQLSTRING+'PRINT ''列名是否对应:是'' '
SET @SQLSTRING=@SQLSTRING+'ELSE '
SET @SQLSTRING=@SQLSTRING+'BEGIN '
SET @SQLSTRING=@SQLSTRING+'PRINT ''列名是否对应:否'' '
SET @SQLSTRING=@SQLSTRING+'PRINT ''列名差异信息如下:原 [''+CONVERT(NVARCHAR(100),@ODIS_COUNT)+'']''+'' '
SET @SQLSTRING=@SQLSTRING+'现 [''+CONVERT(NVARCHAR(100),@NDIS_COUNT)+'']'' '
SET @SQLSTRING=@SQLSTRING+'SELECT ''原【 ''+C.NAME+'' 】'' AS ''差异列名'' ,''原【 ''+O.NAME+'' 】'' AS ''该列所在表'' '
SET @SQLSTRING=@SQLSTRING+'FROM [@]..SYSCOLUMNS AS C '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN [@]..SYSOBJECTS AS O ON O.ID=C.ID '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN SYSOBJECTS AS LO ON LO.NAME=O.NAME '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN SYSCOLUMNS AS LC ON LC.ID=LO.ID AND LC.NAME=C.NAME '
SET @SQLSTRING=@SQLSTRING+'WHERE O.TYPE=''U'' AND LC.NAME IS NULL '
SET @SQLSTRING=@SQLSTRING+'UNION '
SET @SQLSTRING=@SQLSTRING+'SELECT ''现【 ''+C.NAME+'' 】'' AS ''差异列名'' ,''现【 ''+O.NAME+'' 】'' AS ''列所在表:'' '
SET @SQLSTRING=@SQLSTRING+'FROM SYSCOLUMNS AS C '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN SYSOBJECTS AS O ON O.ID=C.ID '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN [@]..SYSOBJECTS AS LO ON LO.NAME=O.NAME '
SET @SQLSTRING=@SQLSTRING+'LEFT JOIN [@]..SYSCOLUMNS AS LC ON LC.ID=LO.ID AND LC.NAME=C.NAME '
SET @SQLSTRING=@SQLSTRING+'WHERE O.TYPE=''U'' AND LC.NAME IS NULL  '
SET @SQLSTRING=@SQLSTRING+'END '
SET @SQLSTRING=@SQLSTRING+'END '
SET @SQLSTRING=@SQLSTRING+'ELSE '
SET @SQLSTRING=@SQLSTRING+'BEGIN '
SET @SQLSTRING=@SQLSTRING+'PRINT ''表名是否对应:否'' '
SET @SQLSTRING=@SQLSTRING+'PRINT ''表名差异信息如下:原 [''+CONVERT(NVARCHAR(100),@ODIS_COUNT)+'']''+'' '
SET @SQLSTRING=@SQLSTRING+'现 [''+CONVERT(NVARCHAR(100),@NDIS_COUNT)+'']'' '
SET @SQLSTRING=@SQLSTRING+'SELECT ''原【 ''+NAME+'' 】'' AS ''差异表名'' FROM [@]..SYSOBJECTS WHERE TYPE=''U'' '
SET @SQLSTRING=@SQLSTRING+'AND NAME NOT IN (SELECT NAME FROM SYSOBJECTS WHERE TYPE=''U'') '
SET @SQLSTRING=@SQLSTRING+'UNION '
SET @SQLSTRING=@SQLSTRING+'SELECT ''现【 ''+NAME+'' 】'' AS ''差异表名'' FROM SYSOBJECTS WHERE TYPE=''U'' '
SET @SQLSTRING=@SQLSTRING+'AND NAME NOT IN (SELECT NAME FROM [@]..SYSOBJECTS WHERE TYPE=''U'') '
SET @SQLSTRING=@SQLSTRING+'END '
SET @SQLSTRING = REPLACE(@SQLSTRING,'[@]..','['+@ODB_NAME+']..')
EXEC SP_EXECUTESQL @SQLSTRING

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值