|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
.. для произвольной таблицы. При условии, что для всех полей таблицы в DDL задано default-значение. Т.е. нужно проверить, равно ли значение поля значению по умолчанию. Гугл выдает только о том, как задать значение по умолчанию, но тут мы и сами с усами, а вот как проверить? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 13:09 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefaultГугл выдает только о том, как задать значение по умолчанию, но тут мы и сами с усами, а вот как проверить? Взять значение по-умолчанию из объявления таблицы и сравнить со значением поля ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 13:12 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
GloryВзять значение по-умолчанию из объявления таблицы и сравнить со значением поля ? Ну в общем да, только надо бы обойтись без хардкодинга значений по умолчанию в условия сравнения. Ну, например: Код: sql 1. 2. 3.
Есть данные о значениях по умолчанию в INFORMATION_SCHEMA.COLUMNS, но там текстовое значение, получаемое через object_definition(default_constraint_id), а default_constraint_id берется из sys.columns.default_object_id. Хочется какую-либо функцию, которой скормив на вход значение и имя таблицы+имя поля/default_constraint_id, на выходе получить 1/0 (совпадает с умолчанием/не совпадает), как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 13:35 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefaultХочется какую-либо функцию, которой скормив на вход значение и имя таблицы+имя поля/default_constraint_id, на выходе получить 1/0 (совпадает с умолчанием/не совпадает), как-то так. Поля parent_column_id int ID of the column in parent_object_id to which this default belongs разве не хватает для этого ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 13:47 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefaultХочется какую-либо функцию, которой скормив на вход значение и имя таблицы+имя поля/default_constraint_id, на выходе получить 1/0 (совпадает с умолчанием/не совпадает), как-то так. так в общем случае это вообще невозможно. ну, например, если в default стоит getdate(). только для констант (ну, или выражений, составленных из констант) можно что-то сравнить. а константу и из object_definition констрейнта вытянуть несложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 13:58 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
daw, да, этот момент я забыл упомянуть: все умолчания константные. dawа константу и из object_definition констрейнта вытянуть несложно. Парсингом текста DDL констрейнта? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 14:22 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefaultПарсингом текста DDL констрейнта? Вы запрос к sys.default_constraints вообще делали ? Описание в хелпе читали ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 14:25 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
Пардон, постингом выше описка: не 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 я это могу сделать вполне однозначно, а вот в запросе - вряд ли в общем случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 14:40 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefaultРазумеется. Всё, что я могу получить из sys.default_constraints - это значение поля definition, которое nvarchar(max). Хотя в хелпе и пишут, что The semantics of the decoded expression are equivalent to the original text - все равно остается вопрос кастинга полученной подстроки в нужный тип данных (и только потом сравнения). В динамическом sql я это могу сделать вполне однозначно, а вот в запросе - вряд ли в общем случае. Для приведенного вами в этой теме примера в этом поле будет ('0') Вам этого недостаточно что ли ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 14:43 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefault, > все равно остается вопрос кастинга полученной подстроки в нужный тип данных (и только потом сравнения). > В динамическом sql я это могу сделать вполне однозначно, а вот в запросе - вряд ли в общем случае. да забудьте вы об "общих случаях". количество типов данных в ms sql не так уж велико. надо только не cast к нужному типу делать в зависимости от типа данных столбца, а и каст и сравнение - тогда и без динамики можно. типа: case when тип = int then case when cast(... As int) = <значение в столбце> then 1 else 0 end ... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 14:52 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefaultРазумеется. Всё, что я могу получить из sys.default_constraints - это значение поля definition, которое nvarchar(max). Хотя в хелпе и пишут, что The semantics of the decoded expression are equivalent to the original text - все равно остается вопрос кастинга полученной подстроки в нужный тип данных (и только потом сравнения). В динамическом sql я это могу сделать вполне однозначно, а вот в запросе - вряд ли в общем случае. а если приводить оба значения к строкам одинаковым способом и сравнивать уже строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 14:53 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
Может, в транзакции просто сделать INSERT DEFAULT в поле таблицы, достать полученное значение в табличную переменную OUTPUTом, а транзакцию откатить? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 14:58 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
GloryДля приведенного вами в этой теме примера в этом поле будет ('0') Вам этого недостаточно что ли ? Это же всего лишь пример. Вполне возможно такое: Код: sql 1. 2. 3.
- следовательно, уже нужно будет вытаскивать тип столбца, и выполнять приведение типа. А еще может быть такое: Код: sql 1. 2. 3.
- я получу строку '0x0102', и для приведения типа придется еще использовать стиль приведения (а на 2005-м сервере придется преобразовывать через xquery, т.к. нет поддержки стилей для binary). В общем, почти всё это, конечно, решаемо... простыней кода с кучей кейсов на все частные случаи. Но, видимо, другого выхода нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 14:59 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefault- следовательно, уже нужно будет вытаскивать тип столбца, и выполнять приведение типа. И в чем проблема с этим ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 15:01 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
iapМожет, в транзакции просто сделать INSERT DEFAULT в поле таблицы, достать полученное значение в табличную переменную OUTPUTом, а транзакцию откатить? Мне проверка нужна в запросе, вне запроса такое вполне нормально решается динамикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 15:01 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefault, есть тип SQL_VARIANT, можно также приводить к NVARCHAR(), ибо к нему всё можно привести. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 15:05 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
А в чём смысл этой задачи кроме академического? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 15:05 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
iapByDefault, есть тип SQL_VARIANT, можно также приводить к NVARCHAR(), ибо к нему всё можно привести. Код: sql 1.
беда в том, что definition для defaulta - это _уже_ строка. а, к примеру, одинаковые значения datetime можно записывать разными строками. так что да - простыня с case-ами. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 15:09 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
dawа, к примеру, одинаковые значения datetime можно записывать разными строками. И как эти разные строки будут конвертироваться при разных настройках коннекта ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 15:10 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
Glorydawа, к примеру, одинаковые значения datetime можно записывать разными строками. И как эти разные строки будут конвертироваться при разных настройках коннекта ? о, кстати да. если в default для datetime константа записана в виде, который по-разному в зависимости от настроек коннекта может интерпретироваться, то решения тоже нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 15:19 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
А ещё пока не отменили дефолтные объекты (которые CREATE DEFAULT) C ними что делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 16:12 |
|
Содержит ли поле выборки значение по умолчанию?
|
|||
---|---|---|---|
#18+
ByDefaultdaw, да, этот момент я забыл упомянуть: все умолчания константные. dawа константу и из object_definition констрейнта вытянуть несложно. Парсингом текста DDL констрейнта? Ну зачем же парсингом: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 16:51 |
|
|
start [/forum/topic.php?fid=46&msg=38636890&tid=1702155]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 285ms |
0 / 0 |