📄 sp_deletefield.sql
字号:
CREATE PROC SP_DELETEFIELD
@TBNAME SYSNAME,
@FDNAME SYSNAME,
@DELFIELD BIT=1
AS
DECLARE HCFOREACH CURSOR GLOBAL FOR
SELECT SQL='ALTER TABLE ['+B.NAME+'] DROP CONSTRAINT ['+D.NAME+']'
FROM SYSCOLUMNS A
JOIN SYSOBJECTS B ON A.ID=B.ID AND A.NAME=@FDNAME AND B.NAME=@TBNAME
JOIN SYSCOMMENTS C ON A.CDEFAULT=C.ID
JOIN SYSOBJECTS D ON C.ID=D.ID
UNION
SELECT S='ALTER TABLE ['+C.NAME+'] DROP CONSTRAINT ['+B.NAME+']'
FROM SYSFOREIGNKEYS A
JOIN SYSOBJECTS B ON B.ID=A.CONSTID
JOIN SYSOBJECTS C ON C.ID=A.FKEYID
JOIN SYSCOLUMNS D ON D.ID=C.ID AND A.FKEY=D.COLID AND D.NAME=@FDNAME
JOIN SYSOBJECTS E ON E.ID=A.RKEYID AND E.NAME=@TBNAME
JOIN SYSCOLUMNS F ON F.ID=E.ID AND A.RKEY=F.COLID
UNION
SELECT CASE WHEN E.XTYPE IN('PK','UQ') THEN 'ALTER TABLE ['+C.NAME+'] DROP CONSTRAINT ['+E.NAME+']'
ELSE 'DROP INDEX ['+C.NAME+'].['+A.NAME+']' END
FROM SYSINDEXES A
JOIN SYSINDEXKEYS B ON A.ID=B.ID AND A.INDID=B.INDID
JOIN SYSOBJECTS C ON B.ID=C.ID AND C.XTYPE='U' AND C.NAME=@TBNAME
JOIN SYSCOLUMNS D ON B.ID=D.ID AND B.COLID=D.COLID AND D.NAME=@FDNAME
LEFT JOIN SYSOBJECTS E ON E.ID=OBJECT_ID(A.NAME)
WHERE A.INDID NOT IN(0,255)
EXEC SP_MSFOREACH_WORKER '?'
IF @DELFIELD=1
EXEC('ALTER TABLE ['+@TBNAME+'] DROP COLUMN ['+@FDNAME+']')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -