Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный? / 12 сообщений из 12, страница 1 из 1
28.12.2021, 07:57
    #40123507
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
Здравствуйте.
В базе одной программы, обнаружен странный объект на который ругается новая версия программы (предыдущие его успешно игнорировали)
запрос

select * from sys.all_objects
where [name] like '%имяобъекта%'

показывает

name = имяобъекта
object_id = 5575058
principal_id = NULL
schema_id = 1
parent_object_id = 0
type = D
type_desc = DEFAULT_CONSTRAINT
create_date = 2012-05-04 19:14:22.060
modify_date = 2012-05-04 19:14:22.060
is_ms_shipped = 0
is_published = 0
is_schema_published = 0

---
странность в том что parent_object_id = 0 т.е. совершенно не понятно к чему он привязан.
Удаление
DROP DEFAULT имяобъекта
выдает ошибку
Невозможно удалить по умолчанию "имяобъекта", так как она привязана к одной или нескольким столбец.

Других вариантов удаления не нашел.
Подскажите пожалуйста как его удалить.

P.S. база на сервере MS SQL Server 2019 (15.0.2000.5)
...
Рейтинг: 0 / 0
28.12.2021, 10:47
    #40123540
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
Господин Уэф!
странность в том что parent_object_id = 0 т.е. совершенно не понятно к чему он привязан.
Привязка не может записываться в поле parent_object_id, это же очевидно (как в одно поле записать множество значений?)

Посмотрите INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, может там есть...
...
Рейтинг: 0 / 0
28.12.2021, 10:47
    #40123541
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
alexeyvg
Посмотрите INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, может там есть...
Хотя это не то...
...
Рейтинг: 0 / 0
28.12.2021, 10:58
    #40123546
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
Господин Уэф!,

существуют ли объекты, которые ссылаются на этот?
...
Рейтинг: 0 / 0
28.12.2021, 10:59
    #40123548
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/drop-default-transact-sql?view=sql-server-ver15

В общем, надо сначала отвязать объект DEFAULT от колонки (sp_unbindefault), а потом удалить.

И никогда больше не применять объект DEFAULT (его выбросят со следующей версии. Давно уже обещали)
...
Рейтинг: 0 / 0
28.12.2021, 11:27
    #40123559
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
Надо же, никогда не пользовался. Музейный экспонат.
...
Рейтинг: 0 / 0
28.12.2021, 12:14
    #40123580
4es
4es
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
iap
И никогда больше не применять объект DEFAULT (его выбросят со следующей версии. Давно уже обещали)

Не объект выбросят, а команду DROP DEFAULT.
автор DROP DEFAULT will be removed in the next version of MicrosoftSQL Server. Do not use DROP DEFAULT in new development work, and plan to modify applications that currently use them. Instead, use default definitions that you can create by using the DEFAULT keyword of ALTER TABLE or CREATE TABLE.
...
Рейтинг: 0 / 0
28.12.2021, 14:12
    #40123615
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
Владислав Колосов
существуют ли объекты, которые ссылаются на этот?

select * from sys.all_objects
where parent_object_id=5575058

пусто
...
Рейтинг: 0 / 0
28.12.2021, 14:35
    #40123624
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
alexeyvg
Привязка не может записываться в поле parent_object_id, это же очевидно (как в одно поле записать множество значений?)

Может и записана. По остальным объектам типа DEFAULT_CONSTRAINT поле parent_object_id заполнено и указывает именно на тот объект к которому привязка.

Посмотрите INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, может там есть...
Нет нету.
Нет в том числе и тех пар, что связаны по parent_object_id
...
Рейтинг: 0 / 0
28.12.2021, 16:50
    #40123660
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
4es
Не объект выбросят, а команду DROP DEFAULT
Потому что не будет объектов для применения.
Не зря же упоминается ALTER TABLE и CREATE TABLE.
Кстати, ещё же объекты RULE были. C ними то же самое.
Жаль. Это всё очень удобно было.
...
Рейтинг: 0 / 0
28.12.2021, 17:19
    #40123664
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
Господин Уэф!
По остальным объектам типа DEFAULT_CONSTRAINT поле parent_object_id заполнено и указывает именно на тот объект к которому привязка.

Вполне возможно создать один, ни к чему не относящийся и не привязанный default constraint (или привязанный к нескольким колонкам в разных таблицах) - как выше уже писали, это специфика старых версий сервера:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
select @@version
go
create default test.def_test as 123
go
select name, type_desc, parent_object_id
from sys.objects where object_id=object_id('test.def_test')
go
create table test.table_test1 (n int)
go
create table test.table_test2 (n int)
go
exec sp_bindefault 'test.def_test', 'test.table_test1.n'
go
exec sp_bindefault 'test.def_test', 'test.table_test2.n'
go
insert into test.table_test1 default values;
insert into test.table_test2 default values;

select * from test.table_test1
union all
select * from test.table_test2;

select schema_name(t.schema_id) schema_name, t.name
from sys.columns c
join sys.tables t on t.object_id=c.object_id
where c.default_object_id=object_id('test.def_test')
go

drop table test.table_test1
go
drop table test.table_test2
go
drop default test.def_test
go


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
-----------------------------------------------------------------------------
Microsoft SQL Server 2005 - 9.00.5069.00 (X64) 
	Aug 22 2012 18:02:46 
	Copyright (c) 1988-2005 Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)


(1 row affected)

name                type_desc           parent_object_id
------------------- ------------------- ----------------
def_test            DEFAULT_CONSTRAINT  0

(1 row affected)

Default bound to column.
Default bound to column.

(1 row affected)

(1 row affected)
n
-----------
123
123

(2 rows affected)

schema_name   name
------------- -------------
test          table_test1
test          table_test2

(2 rows affected)
...
Рейтинг: 0 / 0
29.12.2021, 03:00
    #40123769
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный?
Господин Уэф!,

это ограничение что-то вроде пользовательского типа данных по смыслу.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить DEFAULT_CONSTRAINT ни к чему не привязанный? / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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