powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Невозможно удалить поле.
8 сообщений из 8, страница 1 из 1
Невозможно удалить поле.
    #32041212
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После проверки на сущестование определенного столбца ТИПА

if exists(select * from information_schema.columns where table_name=@Alias and column_name=@Field)
.......
невозможно удалить указанный столбец....
Выдается сообщение типа
The object 'DF__HOUSES__fld_m__04459E07' is dependent on column '....'

Можно ли закрыть объект созданный selectом
...
Рейтинг: 0 / 0
Невозможно удалить поле.
    #32041237
DAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прежде чем удалить столбец - нужно
удалять все ограничения целостности,
связанные с ним, в том числе и значения по умолчанию
...
Рейтинг: 0 / 0
Невозможно удалить поле.
    #32041247
DAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для определения задействованности столбца в каких_либо
ограничениях я исп. нижеприведенній фрагмент ЫЗ

set nocount on
declare @T sysname
select @T='users.isp' -- Анализ.столбец
-- ............................................................................
-- Формирование операторов удаления первичного ключа и
-- ссылающихся на него всех внешних ключей, значений по
-- умолчанию и ограничений на значение, касающихся указанного
-- столбца таблицы - @T = 'имя_таблицы.имя_столбца'
-- ............................................................................
declare @NAM_C sysname, @NAM_T sysname, @CCC sysname, @TTT sysname,
@IDT int, @I int, @IDC int, @R int, @L int, @COL_PREC int,
@COL_SCAL int, @COL_NULL tinyint, @FFF varchar(2000), @OT tinyint
declare @StrucDB table (i int NOT NULL identity,
t varchar(255) collate database_default NULL)
select @L=charindex('.',@T), @NAM_C=substring(@T,@L+1,datalength(@T)-@L),
@NAM_T=substring(@T,1,@L-1), @IDT=object_id(@NAM_T),
@NAM_T=object_name(@IDT)
if not exists(select '*' from sysobjects where xtype = 'U' and
status >= 0 and OBJECTPROPERTY(id,N'IsUserTable') = 1 and name = @NAM_T)
begin raiserror ('The table - is unknown!',13,3) return end
if not exists(select '*' from sysobjects o, syscolumns c where c.id = o.id
and o.xtype = 'U' and o.name = @NAM_T and c.name = @NAM_C and o.status >= 0)
begin raiserror ('The column - is unknown!',13,3) return end
-- DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF
declare cur_Sel_Def_Col cursor local for select id, name from sysobjects
where parent_obj = @IDT and xtype = 'D'
open cur_Sel_Def_Col fetch next from cur_Sel_Def_Col into @R,@CCC
while @@FETCH_STATUS >= 0 begin
select @TTT=name from syscolumns where id = @IDT and cdefault = @R
if @TTT = @NAM_C begin
insert into @StrucDB values ('alter table '+@NAM_T+' drop constraint '+@CCC)
break end

fetch next from cur_Sel_Def_Col into @R,@CCC end
close cur_Sel_Def_Col deallocate cur_Sel_Def_Col
-- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
declare cur_Sel_Cc_Col cursor local for select id, name from sysobjects
where parent_obj = @IDT and xtype = 'C'
open cur_Sel_Cc_Col fetch next from cur_Sel_Cc_Col into @R,@CCC
while @@FETCH_STATUS >= 0 begin
if exists(select '*' from syscomments where id = @R and colid = 1 and
charindex('['+@NAM_C+']',text) !=0) begin
insert into @StrucDB values ('alter table '+@NAM_T+' drop constraint '+@CCC)
break end
fetch next from cur_Sel_Cc_Col into @R,@CCC end
close cur_Sel_Cc_Col deallocate cur_Sel_Cc_Col
-- PKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPK
select @L=0,@I=1,@TTT='?'
select @R=indid,@CCC=name from sysindexes where id = @IDT and indid > 0 and
indid < 255 and (status & 64)=0 and (status&2048) != 0
while (@TTT is not null ) begin
select @TTT = index_col(@NAM_T,@R,@I),@I=@I+1
if @TTT = @NAM_C begin select @L=1 break end end
if @L != 0 begin
-- FKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFK
declare cur_DrpDepTab_FK cursor local for select a.constid,b.parent_obj
from sysreferences a,sysobjects b where a.rkeyid = @IDT
and a.constid = b.id and b.xtype = 'F'
open cur_DrpDepTab_FK fetch next from cur_DrpDepTab_FK into @R,@I
while @@FETCH_STATUS >= 0 begin
insert into @StrucDB values ('alter table '+object_name(@I)+
' drop constraint '+object_name(@R))
fetch next from cur_DrpDepTab_FK into @R,@I end
close cur_DrpDepTab_FK deallocate cur_DrpDepTab_FK
insert into @StrucDB values ('alter table '+@NAM_T+' drop constraint '+@CCC) end
if (select count(*) from @StrucDB) != 0 insert into @StrucDB values ('go')
select t from @StrucDB order by i
-- if (select count(*) from @StrucDB) = 0 return 3 return 0 end
-- ============================================================================
-- return 0
go
-- РЕЗУЛЬТАТ

alter table SALDO drop constraint FK_SALDO__USERS
alter table OPER drop constraint FK_OPER__USERS
alter table OPER_ARX drop constraint FK_OPER_ARX__USERS
alter table OPER_Y drop constraint FK_OPER_Y__USERS
alter table SIGN_DOC drop constraint FK_SIGN_DOC__USERS
alter table GRU_USERS drop constraint FK_GRU_USERS__USERS
alter table SH_ACCOUNT drop constraint FK_SH_ACCOUNT__USERS
alter table NP drop constraint FK_NP__USERS
alter table SIGN_REE_DOC drop constraint FK_SIGN_REE_DOC__USERS
alter table ARM_USERS drop constraint FK_ARM_USERS__USERS
alter table USERS drop constraint PK_USERS
go
...
Рейтинг: 0 / 0
Невозможно удалить поле.
    #32041248
DAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для определения задействованности столбца в каких_либо
ограничениях я исп. нижеприведенній фрагмент ЫЗ

set nocount on
declare @T sysname
select @T='users.isp' -- Анализ.столбец
-- ............................................................................
-- Формирование операторов удаления первичного ключа и
-- ссылающихся на него всех внешних ключей, значений по
-- умолчанию и ограничений на значение, касающихся указанного
-- столбца таблицы - @T = 'имя_таблицы.имя_столбца'
-- ............................................................................
declare @NAM_C sysname, @NAM_T sysname, @CCC sysname, @TTT sysname,
@IDT int, @I int, @IDC int, @R int, @L int, @COL_PREC int,
@COL_SCAL int, @COL_NULL tinyint, @FFF varchar(2000), @OT tinyint
declare @StrucDB table (i int NOT NULL identity,
t varchar(255) collate database_default NULL)
select @L=charindex('.',@T), @NAM_C=substring(@T,@L+1,datalength(@T)-@L),
@NAM_T=substring(@T,1,@L-1), @IDT=object_id(@NAM_T),
@NAM_T=object_name(@IDT)
if not exists(select '*' from sysobjects where xtype = 'U' and
status >= 0 and OBJECTPROPERTY(id,N'IsUserTable') = 1 and name = @NAM_T)
begin raiserror ('The table - is unknown!',13,3) return end
if not exists(select '*' from sysobjects o, syscolumns c where c.id = o.id
and o.xtype = 'U' and o.name = @NAM_T and c.name = @NAM_C and o.status >= 0)
begin raiserror ('The column - is unknown!',13,3) return end
-- DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF
declare cur_Sel_Def_Col cursor local for select id, name from sysobjects
where parent_obj = @IDT and xtype = 'D'
open cur_Sel_Def_Col fetch next from cur_Sel_Def_Col into @R,@CCC
while @@FETCH_STATUS >= 0 begin
select @TTT=name from syscolumns where id = @IDT and cdefault = @R
if @TTT = @NAM_C begin
insert into @StrucDB values ('alter table '+@NAM_T+' drop constraint '+@CCC)
break end

fetch next from cur_Sel_Def_Col into @R,@CCC end
close cur_Sel_Def_Col deallocate cur_Sel_Def_Col
-- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
declare cur_Sel_Cc_Col cursor local for select id, name from sysobjects
where parent_obj = @IDT and xtype = 'C'
open cur_Sel_Cc_Col fetch next from cur_Sel_Cc_Col into @R,@CCC
while @@FETCH_STATUS >= 0 begin
if exists(select '*' from syscomments where id = @R and colid = 1 and
charindex('['+@NAM_C+']',text) !=0) begin
insert into @StrucDB values ('alter table '+@NAM_T+' drop constraint '+@CCC)
break end
fetch next from cur_Sel_Cc_Col into @R,@CCC end
close cur_Sel_Cc_Col deallocate cur_Sel_Cc_Col
-- PKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPKPK
select @L=0,@I=1,@TTT='?'
select @R=indid,@CCC=name from sysindexes where id = @IDT and indid > 0 and
indid < 255 and (status & 64)=0 and (status&2048) != 0
while (@TTT is not null ) begin
select @TTT = index_col(@NAM_T,@R,@I),@I=@I+1
if @TTT = @NAM_C begin select @L=1 break end end
if @L != 0 begin
-- FKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFK
declare cur_DrpDepTab_FK cursor local for select a.constid,b.parent_obj
from sysreferences a,sysobjects b where a.rkeyid = @IDT
and a.constid = b.id and b.xtype = 'F'
open cur_DrpDepTab_FK fetch next from cur_DrpDepTab_FK into @R,@I
while @@FETCH_STATUS >= 0 begin
insert into @StrucDB values ('alter table '+object_name(@I)+
' drop constraint '+object_name(@R))
fetch next from cur_DrpDepTab_FK into @R,@I end
close cur_DrpDepTab_FK deallocate cur_DrpDepTab_FK
insert into @StrucDB values ('alter table '+@NAM_T+' drop constraint '+@CCC) end
if (select count(*) from @StrucDB) != 0 insert into @StrucDB values ('go')
select t from @StrucDB order by i
-- if (select count(*) from @StrucDB) = 0 return 3 return 0 end
-- ============================================================================
-- return 0
go
-- РЕЗУЛЬТАТ

alter table SALDO drop constraint FK_SALDO__USERS
alter table OPER drop constraint FK_OPER__USERS
alter table OPER_ARX drop constraint FK_OPER_ARX__USERS
alter table OPER_Y drop constraint FK_OPER_Y__USERS
alter table SIGN_DOC drop constraint FK_SIGN_DOC__USERS
alter table GRU_USERS drop constraint FK_GRU_USERS__USERS
alter table SH_ACCOUNT drop constraint FK_SH_ACCOUNT__USERS
alter table NP drop constraint FK_NP__USERS
alter table SIGN_REE_DOC drop constraint FK_SIGN_REE_DOC__USERS
alter table ARM_USERS drop constraint FK_ARM_USERS__USERS
alter table USERS drop constraint PK_USERS
go
...
Рейтинг: 0 / 0
Невозможно удалить поле.
    #32041366
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, а то бы ковырялся еще... спасибо....!!!
...
Рейтинг: 0 / 0
Невозможно удалить поле.
    #32041373
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ХМ. Дело в том, чо ХП получает имя таблицы и поля.. имя ограничения не известно... и как интересно я его удалять буду?
...
Рейтинг: 0 / 0
Невозможно удалить поле.
    #32041374
Danil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И от седа вытекает вопрос как можно узнать имя ограничения на столбец и возможно значение ограничения?
...
Рейтинг: 0 / 0
Невозможно удалить поле.
    #32041445
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select * from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME ='MyTable' AND COLUMN_NAME = 'MyColumn'
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Невозможно удалить поле.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]