我正在尝试使用T-SQL从不同的表中删除不同的列。
我制作了这段代码,遵循我在SO
上找到的一些提示/* Declaration of variable */
declare @tablename nvarchar(200)
declare @colname nvarchar(200)
declare @default sysname, @sql nvarchar(max)
/* **** Modifications in TITULORECEBERFATURA_ITEMS**** */
/* Drop column NRSEQORDEM */
set @tablename = 'TITULORECEBERFATURA_ITEMS'
set @colname = 'NRSEQORDEM'
select @default = CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE
TABLE_NAME = @tablename
AND COLUMN_NAME = @colname
set @sql = N'alter table ' + @tablename + ' drop constraint ' + @default
exec sp_executesql @sql
set @sql = N'alter table ' + @tablename + ' drop column ' + @colname
exec sp_executesql @sql
上面的代码没有任何问题。但是当我在其下面添加其他代码时,会发生错误。
/* Declaration of variable */
declare @tablename nvarchar(200)
declare @colname nvarchar(200)
declare @default sysname, @sql nvarchar(max)
/* **** Modifications in TITULORECEBERFATURA_ITEMS**** */
/* Drop column NRSEQORDEM */
set @tablename = 'TITULORECEBERFATURA_ITEMS'
set @colname = 'NRSEQORDEM
select @default = CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE
TABLE_NAME = @tablename
AND COLUMN_NAME = @colname
set @sql = N'alter table ' + @tablename + ' drop constraint ' + @default
exec sp_executesql @sql
set @sql = N'alter table ' + @tablename + ' drop column ' + @colname
exec sp_executesql @sql
/* **** Modifications in EMAILCONTAS **** */
/* Drop column NRSEQOPERADORA */
set @tablename = 'EMAILCONTAS'
set @colname = 'NRSEQOPERADORA'
select @default = CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE
TABLE_NAME = @tablename
AND COLUMN_NAME = @colname
set @sql = N'alter table ' + @tablename + ' drop constraint ' + @default
exec sp_executesql @sql
set @sql = N'alter table ' + @tablename + ' drop column ' + @colname
exec sp_executesql @sql
NRSEQORDEM
和他的约束被删除没有问题,但是我在NRSEQOPERADORA
和他的约束列
Msg 5074,Level 16,State 1,Line 1
对象'FK_ EMAILCONT _NRSEQ__25276EE5'取决于列'NRSEQOPERADORA'。
Msg 4922,Level 16,State 9,Line 1
ALTER TABLE DROP COLUMN NRSEQOPERADORA失败,因为一个或多个对象访问此列。
列NRSEQOPERADORA
不会丢失。
如果我为每个声明使用不同的名称,我可以这样做(但不仅有2个,但是很多,并且不是很好,我正在寻找一个“正确的“这样做的方式”
/* Declaration of variable */
declare @tablename nvarchar(200)
declare @colname nvarchar(200)
declare @tablename2 nvarchar(200)
declare @colname2 nvarchar(200)
declare @default sysname, @sql nvarchar(max)
/* **** Modifications in TITULORECEBERFATURA_ITEMS**** */
/* Drop column NRSEQORDEM */
set @tablename = 'TITULORECEBERFATURA_ITEMS'
set @colname = 'NRSEQORDEM
select @default = CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE
TABLE_NAME = @tablename
AND COLUMN_NAME = @colname
set @sql = N'alter table ' + @tablename + ' drop constraint ' + @default
exec sp_executesql @sql
set @sql = N'alter table ' + @tablename + ' drop column ' + @colname
exec sp_executesql @sql
/* **** Modifications in EMAILCONTAS **** */
/* Drop column NRSEQOPERADORA */
set @tablename2 = 'EMAILCONTAS'
set @colname2 = 'NRSEQOPERADORA'
select @default = CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE
TABLE_NAME = @tablename2
AND COLUMN_NAME = @colname2
set @sql = N'alter table ' + @tablename2 + ' drop constraint ' + @default
exec sp_executesql @sql
set @sql = N'alter table ' + @tablename2 + ' drop column ' + @colname2
exec sp_executesql @sql
修改
答案 0 :(得分:0)
可能你首先需要删除约束FK_ EMAILCONT _NRSEQ__25276EE5 尝试
alter table ... drop constraint FK__EMAILCONT__NRSEQ__25276EE5