powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Содержит ли поле выборки значение по умолчанию?
22 сообщений из 22, страница 1 из 1
Содержит ли поле выборки значение по умолчанию?
    #38636688
ByDefault
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.. для произвольной таблицы. При условии, что для всех полей таблицы в DDL задано default-значение. Т.е. нужно проверить, равно ли значение поля значению по умолчанию. Гугл выдает только о том, как задать значение по умолчанию, но тут мы и сами с усами, а вот как проверить?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636695
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefaultГугл выдает только о том, как задать значение по умолчанию, но тут мы и сами с усами, а вот как проверить?
Взять значение по-умолчанию из объявления таблицы и сравнить со значением поля ?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636746
ByDefault
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryВзять значение по-умолчанию из объявления таблицы и сравнить со значением поля ?
Ну в общем да, только надо бы обойтись без хардкодинга значений по умолчанию в условия сравнения.
Ну, например:
Код: sql
1.
2.
3.
create table dbo.test (
  name varchar(10) default('0')
)


Есть данные о значениях по умолчанию в INFORMATION_SCHEMA.COLUMNS, но там текстовое значение, получаемое через object_definition(default_constraint_id), а default_constraint_id берется из sys.columns.default_object_id. Хочется какую-либо функцию, которой скормив на вход значение и имя таблицы+имя поля/default_constraint_id, на выходе получить 1/0 (совпадает с умолчанием/не совпадает), как-то так.
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636765
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefaultХочется какую-либо функцию, которой скормив на вход значение и имя таблицы+имя поля/default_constraint_id, на выходе получить 1/0 (совпадает с умолчанием/не совпадает), как-то так.
Поля parent_column_id int ID of the column in parent_object_id to which this default belongs
разве не хватает для этого ?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636779
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefaultХочется какую-либо функцию, которой скормив на вход значение и имя таблицы+имя поля/default_constraint_id, на выходе получить 1/0 (совпадает с умолчанием/не совпадает), как-то так.

так в общем случае это вообще невозможно. ну, например, если в default стоит getdate().
только для констант (ну, или выражений, составленных из констант) можно что-то сравнить. а константу и из object_definition констрейнта вытянуть несложно.
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636819
ByDefault
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daw,

да, этот момент я забыл упомянуть: все умолчания константные.
dawа константу и из object_definition констрейнта вытянуть несложно.
Парсингом текста DDL констрейнта?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636824
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefaultПарсингом текста DDL констрейнта?
Вы запрос к sys.default_constraints вообще делали ?
Описание в хелпе читали ?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636852
ByDefault
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, постингом выше описка: не DDL, а definition, но от этого не легче.
GloryВы запрос к sys.default_constraints вообще делали ?
Описание в хелпе читали ?
Разумеется. Всё, что я могу получить из sys.default_constraints - это значение поля definition, которое nvarchar(max). Хотя в хелпе и пишут, что The semantics of the decoded expression are equivalent to the original text - все равно остается вопрос кастинга полученной подстроки в нужный тип данных (и только потом сравнения). В динамическом sql я это могу сделать вполне однозначно, а вот в запросе - вряд ли в общем случае.
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636861
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefaultРазумеется. Всё, что я могу получить из sys.default_constraints - это значение поля definition, которое nvarchar(max). Хотя в хелпе и пишут, что The semantics of the decoded expression are equivalent to the original text - все равно остается вопрос кастинга полученной подстроки в нужный тип данных (и только потом сравнения). В динамическом sql я это могу сделать вполне однозначно, а вот в запросе - вряд ли в общем случае.
Для приведенного вами в этой теме примера в этом поле будет ('0')
Вам этого недостаточно что ли ?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636878
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefault,

> все равно остается вопрос кастинга полученной подстроки в нужный тип данных (и только потом сравнения).
> В динамическом sql я это могу сделать вполне однозначно, а вот в запросе - вряд ли в общем случае.

да забудьте вы об "общих случаях". количество типов данных в ms sql не так уж велико. надо только не cast к нужному типу делать в зависимости от типа данных столбца, а и каст и сравнение - тогда и без динамики можно. типа:
case when тип = int then case when cast(... As int) = <значение в столбце> then 1 else 0 end
...
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636880
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefaultРазумеется. Всё, что я могу получить из sys.default_constraints - это значение поля definition, которое nvarchar(max). Хотя в хелпе и пишут, что The semantics of the decoded expression are equivalent to the original text - все равно остается вопрос кастинга полученной подстроки в нужный тип данных (и только потом сравнения). В динамическом sql я это могу сделать вполне однозначно, а вот в запросе - вряд ли в общем случае.
а если приводить оба значения к строкам одинаковым способом и сравнивать уже строки?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636888
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, в транзакции просто сделать INSERT DEFAULT в поле таблицы,
достать полученное значение в табличную переменную OUTPUTом, а транзакцию откатить?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636890
ByDefault
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryДля приведенного вами в этой теме примера в этом поле будет ('0')
Вам этого недостаточно что ли ?
Это же всего лишь пример. Вполне возможно такое:
Код: sql
1.
2.
3.
create table dbo.test(
  dt datetime default '20140101'
)


- следовательно, уже нужно будет вытаскивать тип столбца, и выполнять приведение типа. А еще может быть такое:
Код: sql
1.
2.
3.
create table dbo.test(
  n binary(2) default 0x0102
)


- я получу строку '0x0102', и для приведения типа придется еще использовать стиль приведения (а на 2005-м сервере придется преобразовывать через xquery, т.к. нет поддержки стилей для binary). В общем, почти всё это, конечно, решаемо... простыней кода с кучей кейсов на все частные случаи. Но, видимо, другого выхода нет.
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636893
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefault- следовательно, уже нужно будет вытаскивать тип столбца, и выполнять приведение типа.
И в чем проблема с этим ?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636895
ByDefault
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iapМожет, в транзакции просто сделать INSERT DEFAULT в поле таблицы,
достать полученное значение в табличную переменную OUTPUTом, а транзакцию откатить?
Мне проверка нужна в запросе, вне запроса такое вполне нормально решается динамикой.
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636903
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByDefault,

есть тип SQL_VARIANT,
можно также приводить к NVARCHAR(), ибо к нему всё можно привести.

Код: sql
1.
SELECT CONVERT(NVARCHAR(MAX),'Строка',126)
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636904
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чём смысл этой задачи кроме академического?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636908
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapByDefault,

есть тип SQL_VARIANT,
можно также приводить к NVARCHAR(), ибо к нему всё можно привести.

Код: sql
1.
SELECT CONVERT(NVARCHAR(MAX),'Строка',126)



беда в том, что definition для defaulta - это _уже_ строка. а, к примеру, одинаковые значения datetime можно записывать разными строками.

так что да - простыня с case-ами.
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636909
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dawа, к примеру, одинаковые значения datetime можно записывать разными строками.
И как эти разные строки будут конвертироваться при разных настройках коннекта ?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38636921
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glorydawа, к примеру, одинаковые значения datetime можно записывать разными строками.
И как эти разные строки будут конвертироваться при разных настройках коннекта ?

о, кстати да. если в default для datetime константа записана в виде, который по-разному в зависимости от настроек коннекта может интерпретироваться, то решения тоже нет.
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38637005
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё пока не отменили дефолтные объекты
(которые CREATE DEFAULT)
C ними что делать?
...
Рейтинг: 0 / 0
Содержит ли поле выборки значение по умолчанию?
    #38637041
Гузы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ByDefaultdaw,

да, этот момент я забыл упомянуть: все умолчания константные.
dawа константу и из object_definition констрейнта вытянуть несложно.
Парсингом текста DDL констрейнта?

Ну зачем же парсингом:
Код: sql
1.
2.
3.
4.
declare @tr nvarchaR(MAX)
select @tr=definition from [sys].[default_constraints]
where object_id = xxxxxxxxxx
exec  ('select '+@tr)
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Содержит ли поле выборки значение по умолчанию?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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