表里新增一个字段设置了默认值,要写回滚脚本不知道怎么写

---涛声依旧--- 2016-06-01 06:24:23
例如:
--1、增量脚本
--新增一字段RefundBy 并设置了默认值
ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund]
ADD RefundBy nvarchar(20) NOT NULL DEFAULT ''

--2、回滚脚本
--回滚脚本如下:
--sp_helpconstraint [GW_WRestraurant_Order_Refund] --须手工查出来对应的约束值后再drop掉
ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund] DROP CONSTRAINT DF__GW_WRestr__Audit__07970BFE
Go
ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund]
DROP COLUMN RefundBy

问题:回滚脚本如何写成通用的啊?因为执行回滚脚本后,再执行增量脚本后约束的名字变化了
请各位高手赐教,300分送上,谢谢!
...全文
477 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-06-01
  • 打赏
  • 举报
回复
--DROP TABLE Tab6
CREATE TABLE Tab6(RowID INT IDENTITY,ID INT DEFAULT 1)


GO

DECLARE @TabName sysname='Tab6',@ColName sysname='ID';


DECLARE @Sql NVARCHAR(max)

--只1列时,删除表
IF EXISTS(SELECT 1 FROM sys.columns WHERE object_id=OBJECT_ID('Tab6') HAVING COUNT(*)=1)
BEGIN
	EXEC('DROP TABLE '+@TabName)
	RETURN
END 
SELECT  @Sql='ALTER TABLE '+@TabName+' DROP CONSTRAINT '+d.name+';ALTER TABLE  '+@TabName+' DROP Column '+@ColName+';'
FROM    sys.default_constraints AS d
        INNER JOIN sys.columns AS c ON d.parent_column_id = c.column_id
		INNER JOIN sys.tables AS e ON e.object_id=c.object_id
WHERE   d.parent_object_id = e.object_id AND 
        e.name=@TabName AND c.name = @ColName;
EXEC(@Sql)

SELECT * FROM Tab6
kingtiy 2016-06-01
  • 打赏
  • 举报
回复


declare @table nvarchar(50)='tbxxx',@column nvarchar(50)='colunname'


select 'alter table '+@table +' drop constraint ' +name+';
alter table '+@table +' drop column  '+@column
from    sys.default_constraints
where   parent_object_id=object_id(@table)
        and parent_column_id=(select    column_id
                              from      sys.columns
                              where     name=@column
                                        and object_id=object_id(@table)
                             );
--这个语句生成的sql语句,就是你要的.
---涛声依旧--- 2016-06-01
  • 打赏
  • 举报
回复
好的,谢谢! 目前自己写了一个临时办法,但有缺陷,明天有时间再搞,今天要更新了

--先drop掉约束
DECLARE @SQL_Default VARCHAR(4000)
DECLARE @SQL_Exec VARCHAR(4000)
SET @SQL_Exec=''
SET @SQL_Default='ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund] DROP CONSTRAINT '

SELECT @SQL_Exec=@SQL_Exec+@SQL_Default + t1.name +'; ' FROM sys.objects t1 WHERE t1.type='D' 
AND EXISTS( 
SELECT  *
FROM    sys.syscolumns col
        INNER JOIN dbo.sysobjects obj ON col.id = obj.id
     AND obj.xtype = 'U'
     AND obj.status >= 0
WHERE obj.name='GW_WRestraurant_Order_Refund' AND  col.name = 'RefundBy'
AND t1.parent_object_id=obj.id
)
EXECUTE(@SQL_Exec)


--再drop字段
ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund]
DROP COLUMN RefundBy 
GO
ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund]
DROP COLUMN RefundOn
GO
ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund]
DROP COLUMN AuditStatus 
GO
ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund]
DROP COLUMN AuditBy 
GO
ALTER TABLE [dbo].[GW_WRestraurant_Order_Refund]
DROP COLUMN AuditOn 
GO
卖水果的net 版主 2016-06-01
  • 打赏
  • 举报
回复
sp_helptext sp_helpconstraint 分析一这个这个过程,有相关的表

34,593

社区成员

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

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