34,593
社区成员
发帖
与我相关
我的任务
分享
--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
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语句,就是你要的.
--先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