|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
впервые взглянул на эти штуковины, поробовал - неудобно Кто-нибудь использует? Какие преимущества и недостатки? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 20:23 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Rules - Deprecated BOL В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Вместо этой инструкции рекомендуется применять проверку ограничений. Эти ограничения создаются при помощи ключевого слова CHECK инструкции CREATE TABLE или ALTER TABLE. Дополнительные сведения см. в разделе Ограничения уникальности и проверочные ограничения. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 21:35 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
spвпервые взглянул на эти штуковины, поробовал - неудобно Кто-нибудь использует? Какие преимущества и недостатки?Пользовательские типы нафиг не нужны. Никогда не использовал. Правда, с SQL2005 существуют пользовательские типы CLR. Может быть, может быть... Ещё не пробовал. Rule когда-то, в самом начале, применял. Очень удобно. Но, увы - их скоро Microsoft выкинет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 21:53 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
iap, ша прийдет уважаемый кримеан - и расскажет тебе про пользовательсик типы Он их шибко любит ,и что правда только в его системе я видел их толком рабоичими У себя мы от них избавилис -не удобно ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 21:56 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
iapПользовательские типы нафиг не нужны. Никогда не использовал. User-Defined Table Types в связке с Table-Valued Parameters позволяют сильно упростить жизнь... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 21:59 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
pkarklin, не ну тут речь немного о другом ,о "старых" вариантах ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 22:03 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
А почему неудобно? Ну просто интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 00:07 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
pkarkliniapПользовательские типы нафиг не нужны. Никогда не использовал. User-Defined Table Types в связке с Table-Valued Parameters позволяют сильно упростить жизнь... не могли б на примере рассказать? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 15:29 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
MniorА почему неудобно? Ну просто интересно. Неудобно в плане того что они не редактируемые - недоглядел, заюзал в куче таблиц а потом чтоб переделать это надо еще так по@@цца! Я ж по простоте своей подумал что очень удобная штука, что типа можно из одного места менять сразу типы колонок в разных таблицах - а нет! Тогда вообще не понятно ихнее предназначений!? Непойму какой от них плюс? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 15:32 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Ну типа логика описана в одном месте. А то что нельзя автоматом заменить в 100500 таблах, так это потому что им (M$) лень даже элементарные проверки в одной табле проверить. Не говоря чтоб пройтись по всем объектам. Слишком много исключений, но самое нерешаемое так это порядок изменений. С другой стороны рулы это обычный CHECK значит нужно банально данные просто пере-проверить. Вот тут лучше голосовать . ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 18:32 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Уважаемые, а пользовательские типы данных имеют какие-либо преимущества по сравнению с обычными типами данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 14:26 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
_ч_Уважаемые, а пользовательские типы данных имеют какие-либо преимущества по сравнению с обычными типами данных?Кхм. "А цифра 3 лучше чем 5?" Так на то они и "пользовательские", что это не "обычные типы" данных. А вообще, если отойти от MS SQL, то есть мнение что это типа для согласования объектного представления и реляционного (но по мне так это ...ня). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 15:52 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Mnior, Просто почему я задал такой вопрос. Вроде бы пользовательский тип данных может быть удобен разработчикам потому, что позволяет поменять тип данных во всех таблицах, где он использовался, если поменять тип данных у этого типа. А тут Вы пишете, что это не так. Так в чем преимущества и какова цель использования пользовательских типов данных вместо обычных? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:07 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
_ч_А тут Вы пишете, что это не так. Так в чем преимущества и какова цель использования пользовательских типов данных вместо обычных?Так вот поэтому преимуществ и нет. Единственное, что полезно - дисциплинирует разработчиков, заставляя пользоваться одним типом. Для примера, в системных процедурах для имён используют тип sysname. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:12 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
_ч_Так в чем преимущества и какова цель использования пользовательских типов данных вместо обычных? В том, что не позволяет, например, программеру "фантизировать" с длиной параметра. Т.е. не будет программера заботить, что там varchar(100) или varchar(200) определен для Address. Он будет писать declare @x Address ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:15 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Особого смысла нет. Как и не является вредным. Единственный плюс - наглядность. Просто например одно дело видеть nvarchar(128), другое - dbo.TSystemType (например, результат suser_sname) Я использую PowerrDesigner и там да, домены, все такое. Наглядность у меня в модели. Удобно разом менять типы у всех столбцов переопределением домена. MS SQL этого не позволяет. Так что при генерации скрипта в БД я галочки у опций проставляю, чтобы домены преобразовывались в системные типы. pkarkin правильно заметил, смысл еще есть использовать табличные типы. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:18 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:25 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
trew, конструкции ALTER TYPE нет ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:29 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Glory_ч_Так в чем преимущества и какова цель использования пользовательских типов данных вместо обычных? В том, что не позволяет, например, программеру "фантизировать" с длиной параметра. Т.е. не будет программера заботить, что там varchar(100) или varchar(200) определен для Address. Он будет писать declare @x Address согласен, сам для таких случаев использую. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:32 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Arm79Я использую PowerrDesigner и там да, домены, все такое. Наглядность у меня в модели. Удобно разом менять типы у всех столбцов переопределением домена. MS SQL этого не позволяет. PowerrDesigner меняет типы данных только в модели, или в существующей БД тоже может поменять? Интересно было бы посмотреть, как он поменяет тип столбца int на bigint в таблице величиной хотя бы 100 млн. записей :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:35 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Shakill, Таблицы уже используют этот тип. Тогда так (ниже) можно? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Т.е. изменяя тип данные, он во всех таблицах где используется, расшириться до bigint? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:36 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
trewТогда так (ниже) можно? А хелп почитать ? The DROP TYPE statement will not execute when any of the following is true: - There are tables in the database that contain columns of the alias data type or the user-defined type. Information about alias or user-defined type columns can be obtained by querying the sys.columns or sys.column_type_usages catalog views. ... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:38 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
trewТ.е. изменяя тип данные, он во всех таблицах где используется, расшириться до bigint?Нет, будет ошибка: тип используется, удалить нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:39 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
trewТогда так (ниже) можно? BOL, DROP TYPEThe DROP TYPE statement will not execute when any of the following is true: There are tables in the database that contain columns of the alias data type or the user-defined type. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:39 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Glory, Спасибо, понятно. А было бы удобно, если бы такая возможность была. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:41 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
trewА было бы удобно, если бы такая возможность была. Ага. Мы сделали сначала поле varchar(max) для хранения даты-времени Потом решили поменять его на datetime Хорошо бы было, если бы сервер сам сконвертировал все данные из одного типа в другой. Тут и сказке конец. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 16:44 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Гость333, Не пробовал, страшно :-) напрямую вообще сторонними дизайнерами не трогаю. Но уверен, что не сможет ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 17:05 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
GlorytrewА было бы удобно, если бы такая возможность была. Ага. Мы сделали сначала поле varchar(max) для хранения даты-времени Потом решили поменять его на datetime Хорошо бы было, если бы сервер сам сконвертировал все данные из одного типа в другой. Тут и сказке конец.Да в общем в этом ничего невероятного нету. Можно пытаться конвертить по умолчанию, можно ограничиться только родственными типами (например, менять date на datetime), можно к конструкции ALTER TYPE добавить выражения приведения данных при изменении типов. То есть это не то, что теоретически невозможно, просто МС увлекается всякими CLR и не увлекается совершенствованием реляционного ядра :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 17:05 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
alexeyvg можно ограничиться только родственными типами (например, менять date на datetime) вот хотя бы это, с возможностью явно запретить/разрешить усечение данных. и уже бы пользы от типов было гораздо больше ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 17:10 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
alexeyvgТо есть это не то, что теоретически невозможно, просто МС увлекается всякими CLR и не увлекается совершенствованием реляционного ядра :-) Мне кажется, что правильное проектирование схемы не является функцией ядра. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 17:14 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
alexeyvgнапример, менять date на datetime То есть поменять 3-байтовый тип данных на 8-байтовый? Как это должно выглядеть для той же таблицы на 100 млн. записей? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 17:32 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
GloryalexeyvgТо есть это не то, что теоретически невозможно, просто МС увлекается всякими CLR и не увлекается совершенствованием реляционного ядра :-) Мне кажется, что правильное проектирование схемы не является функцией ядра.Это не проектирование, а изменение модели данных. Модель данных в MSSQL менять допускается, например, для таблиц разрешены ALTER TABLE, можно менять, удалять, добавлять колонки. Я, честно говоря, не вижу разницы в изменении типа так, как я описал выше, и том же самом изменении, сделанном непоследственно в таблице. Гость333alexeyvgнапример, менять date на datetime То есть поменять 3-байтовый тип данных на 8-байтовый? Как это должно выглядеть для той же таблицы на 100 млн. записей? :-)Да в общем не так это сложно, учитывая, что это можно делать не немедленно. Но это так, лирическое отступление. Уж точно это не сложнее (и не проще), чем поменять date на datetime непосредственно в таблице, что сейчас разрешено (и было разрешено всегда). То есть просто думать надо перед выполнением таких действий, но тем не менее потенциальная длительность изменений и ресурсы, которые на это потребуются, не повод не делать такую функциональность или запрещать существующую (ALTER TABLE). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 18:25 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
GloryВ том, что не позволяет, например, программеру "фантизировать" с длиной параметра. Т.е. не будет программера заботить, что там varchar(100) или varchar(200) определен для Address. Он будет писать declare @x AddressКак раз в третьем манифесте это тоже было поднято. Т.е. можно возразить: - сделай таблицу "Адрес" - таблица с одной колонкой? - сейчас одна, завтра сложная структура ... Вот именно, что язык не позволяет манипулировать "отрывом колонки" от сущности и общим описанием "отношения". Привет "Tutorial D". По сути мы этого и хотим, что данные как бы во многих таблах, а с другой словно всё в одной. Это не вписывает в текущую реализацию скуля. (Возможно в Tutorial D можно и обновлять (update) данные сразу по всему отношению, привязанные к объектам разного типа - читать "в разных таблах"). Думаю, что для MS не слишком сложно сделать ALTER TYPE для SPARSE колонок и Column-Store таблиц. Но в том-то и проблема, что на практике всё строчное и фича малоприменима. А с другой стороны, со всеми оптимизациями, аля секционирование - не так это всё просто, по одной колонке заменять. У PostreSQL это проще - там таблицы можно наследовать и на этом строится секционирование. Поменял в базовой и всё, везде поменялось (не пробывал). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 20:43 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Используем типы только в ДБ проекте, да и то, достаточно ограниченно. При развёртывании проекта UDT приеобразуются в базовые типы и на этом уходят в эксплуатацию. По поводу UDTT, что pkarklin написал - да, это удобно, но это другая немного песня. Очень хотелось бы узнать точку зрения Crimean. Из своего опыта - ничего полезного из пользовательских типов не вынес проблем от пользовательских типов больше, чем предоставляемых ими преимуществ. Основные - проблемы в случае, когда тип по тем или иным причинам перестаёт удовлетворять требованиям, или неудобства, когда там, где можно было бы использовать короткий numeric/decimal втыкают UDT с базовым типом большего размера "просто для однообразия". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 23:02 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
любитель типовИспользуем типы только в ДБ проекте, да и то, достаточно ограниченно. При развёртывании проекта UDT приеобразуются в базовые типы и на этом уходят в эксплуатацию. По поводу UDTT, что pkarklin написал - да, это удобно, но это другая немного песня. Очень хотелось бы узнать точку зрения Crimean. Из своего опыта - ничего полезного из пользовательских типов не вынес проблем от пользовательских типов больше, чем предоставляемых ими преимуществ. Основные - проблемы в случае, когда тип по тем или иным причинам перестаёт удовлетворять требованиям, или неудобства, когда там, где можно было бы использовать короткий numeric/decimal втыкают UDT с базовым типом большего размера "просто для однообразия".Забыл добавить - CLR типы действительно удообная штука. Не то, чтобы широко это дело у нас использовалось, но есть пара мест, весьма к месту пришлись. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 23:05 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
alexeyvgДа в общем не так это сложно, учитывая, что это можно делать не немедленно. Но это так, лирическое отступление. Уж точно это не сложнее (и не проще), чем поменять date на datetime непосредственно в таблице, что сейчас разрешено (и было разрешено всегда). То есть просто думать надо перед выполнением таких действий, но тем не менее потенциальная длительность изменений и ресурсы, которые на это потребуются, не повод не делать такую функциональность или запрещать существующую (ALTER TABLE). Предположим, что у меня 1 тип использован в 100 таблицах. Что будет, если в 99 таблицах автоматическая смена типа пройдет удачно, а в 100ой обломится ? Кто будет отвечать за логическую целостность ? Если ядро, то оно сможет сделать это только через транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 09:08 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
GloryalexeyvgДа в общем не так это сложно, учитывая, что это можно делать не немедленно. Но это так, лирическое отступление. Уж точно это не сложнее (и не проще), чем поменять date на datetime непосредственно в таблице, что сейчас разрешено (и было разрешено всегда). То есть просто думать надо перед выполнением таких действий, но тем не менее потенциальная длительность изменений и ресурсы, которые на это потребуются, не повод не делать такую функциональность или запрещать существующую (ALTER TABLE). Предположим, что у меня 1 тип использован в 100 таблицах. Что будет, если в 99 таблицах автоматическая смена типа пройдет удачно, а в 100ой обломится ? Кто будет отвечать за логическую целостность ? Если ядро, то оно сможет сделать это только через транзакцию.Да, через транзакцию. Как можно решить эту же бизнес-задачу сейчас? Открыть транзакцию, и сделать 100 раз ALTER TABLE для этих таблиц. Так что в общем то же самое. Но конечно вариант без "типа" более гибкий - я могу делать эти же операции частями, забив на целостность, управляя целостностью вручную и полностью забив на атомарность этой операции. Соответственно, можно было бы предусмотреть в варианте ALTER TYPE 2 режима - атомарный и не атомарный. В первом случае операция выполяется или не выполняется целиком, откатываясь после первой же ошибки, во втором выполняется для тех таблиц, где это получилось, возвращая ошибки. Ну и понятно, изменение модели - исключительный случай, нужно будет предусматривать "окно" для изменений, общем не такое простое дело. С другой стороны, есть масса случаев, когда на такой операции не может произойти ошибок, кроме общесистемных (например, кончилось место). Кроме того, для таких операций (где не может произойти ошибок, кроме общесистемных) МС часто предусматривает асинхронное выполнение. Возьмите к примеру добавление NULL поля в таблицу - это даже для большой таблицы выполняется моментально, потому что физическое изменение страницы откладывается на момент изменения страницы какой либо обновляющей операцией. Вот и здесь - при изменении "типа" в некоторых случаях можно использовать этот режим. Например, менять varchar(100) на varchar(200) или varchar(100) на nvarchar(100) можно соверешнно безопасно в отложенном режиме, так что для 100 огромных таблиц это займёт милисекунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 10:41 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
alexeyvgСоответственно, можно было бы предусмотреть в варианте ALTER TYPE 2 режима - атомарный и не атомарный. ... во втором выполняется для тех таблиц, где это получилось, возвращая ошибки. Это будет какой-то странный режим. Что получится в итоге? В таблице_1 есть столбец с типом МойТип, и в таблице_2 есть столбец с типом МойТип. Но при этом для таблицы_1 МойТип = int, а для таблицы_2 МойТип = bigint? Или вы имели в виду что-то другое? alexeyvgНапример, менять varchar(100) на varchar(200) можно соверешнно безопасно в отложенном режиме, так что для 100 огромных таблиц это займёт милисекунды. true alexeyvgНапример, менять varchar(100) на nvarchar(100) можно соверешнно безопасно в отложенном режиме, так что для 100 огромных таблиц это займёт милисекунды. false Изменение типа в данном случае будет как на уровне метаданных, так и на уровне данных. В целом согласен, что конструкцию ALTER TYPE вполне можно было бы сделать. Вот, кстати, нашёлся запрос этой фичи на Коннекте, но у Microsoft'а нет ресурсов для её реализации: http://connect.microsoft.com/SQLServer/feedback/details/319134/msft-mso-support-alter-type Thank you for submitting this suggestion, but given its priority relative to the many other items in our queue, it is unlikely that we will actually complete it. As such, we are closing this suggestion as “won’t fix”. Please consider using tool like Visual Studio or SQL Studio to refactor your types. They will handle the renames including reference inside module definitions. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 11:05 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
alexeyvgДа, через транзакцию. Как можно решить эту же бизнес-задачу сейчас? Открыть транзакцию, и сделать 100 раз ALTER TABLE для этих таблиц. Так что в общем то же самое. Но конечно вариант без "типа" более гибкий - я могу делать эти же операции частями, забив на целостность, управляя целостностью вручную и полностью забив на атомарность этой операции. Ваши примеры для очень простых случаев Даже ALTER TABLE не позволяет изменять тип и размерность поля, например, для поля Used in a PRIMARY KEY or [FOREIGN KEY] REFERENCES constraint. и еще куча ограничений Если ввести еще ваши ограничения, то по-моему останется только такие изменения, которые затрагивают только метаданные, а не сами данные Т.е. varchar(100) на varchar(200) . А вот varchar(200) на varchar(100) - уже нет ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 12:51 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
alexeyvgпредусмотреть в варианте ALTER TYPE 2 режима - атомарный и не атомарный.К примеру у FOREGN KEY есть 2 управляющих свойства, точнее 3 состояния (WITH [NOT] CHECK [NOT] CHECK). Когда он отключён, включён для изменяемых данных и включён и проверен для всех данных. Если экстраполироать, то можно не только менять VarChar(200) -> VarChar(100) в отложенном режиме, но и так всю схему бд. Кстати, понял в чём MS проффтыкала. Она могла мульти-схемность таблицы не только на DEFAULT-ы распространить, а на всё. При этом не нужно менять схему БД, уже всё заложено в структуры. Тогда можно сделать ассинхронный CHECK на что угодно, и на DEFAULT и на FOREIGN KEY и на CHECK, а далее на колонки. Притом прерываемый: если не все страницы проверил и прервался, то можно продолжить позже. Но с колонками загвоздка - есть описание текущее и последующее, а с констрейнтами всё проще, предыдущее состояния нет (отсутствие ограничения). Для INSERT/UPDATE новое описание, но определение колонок всё ещё старое. В текущее INFORMATION_SCHEMA это не вписывается. Как это экстраполировать на TYPE. Т.к. уже у таблиц есть несколько внутренних описаний структуры (версий) и в страницах хранится код структуры (версии). То также сделать в типах, и версиях таблиц прописывать не тип, а его версию. Для всех переменных всегда берётся последняя версия тип. При вставке/изменении данных всегда ставится последняя версия. Но при переключении секций может свалится в ошибку - "Таблицы содержит несколько версий метаданных. Проведите CHECK или UPDATE для устранения этой ошибки". ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 16:09 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Ещё один логический баг/недоработка со стороны MS: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 16:30 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Mniorуже у таблиц есть несколько внутренних описаний структуры (версий) и в страницах хранится код структуры (версии) Где можно почитать об этом? Или в какую часть вывода DBCC PAGE посмотреть, чтобы увидеть код структуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 16:43 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Гость333Mniorуже у таблиц есть несколько внутренних описаний структуры (версий) и в страницах хранится код структуры (версии)Где можно почитать об этом? Или в какую часть вывода DBCC PAGE посмотреть, чтобы увидеть код структуры? Вот еле нашёл, но перечитывать сейчас времени нет. Проверьте пожалуйста, не проффтыкал ли я. Может там механизм всётаки другой. Где-то, я помню что был случай когда не просто создаётся колонка, но и изменяется DEFAULT. Т.е. как бы их два, один для тех страниц которые не обновлены, другие для текущих вставок. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 21:17 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
GloryДаже ALTER TABLE не позволяет изменять тип и размерность поля, например, для поля Used in a PRIMARY KEY or [FOREIGN KEY] REFERENCES constraint. и еще куча ограниченийДа, ALTER TABLE не позволяет, так идея в том, чтобы для ALTER TYPE позволяло, ведь тип будет изменён везде, так что REFERENCES constraint не пострадают. GloryЕсли ввести еще ваши ограничения, то по-моему останется только такие изменения, которые затрагивают только метаданные, а не сами данные Т.е. varchar(100) на varchar(200) . А вот varchar(200) на varchar(100) - уже нетДа в общем разные могут быть подходы; по крайней мере это тема для обсуждения, ИМХО не такая плохая идея. По крайней мере, в транзакции всё можно поменять, хоть метаданные, хоть данные... Т.е. ограничения касаются только выбора механизма изменений типа, быстрый или медленный. MniorТ.к. уже у таблиц есть несколько внутренних описаний структуры (версий) и в страницах хранится код структуры (версии). То также сделать в типах, и версиях таблиц прописывать не тип, а его версию.Да, я собственно это и имел в виду. Такой способ, понятно, годится только для безусловно совместимых изменений, но это уже что то, можно будет хоть int на bigint поменять быстро, без ожиданий... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 21:26 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
alexeyvgДа, я собственно это и имел в виду.Вы думаете мы всё продумали и можем уже предлагать MS? Мне кажется мы возможно не учли какой-то логичной фишки, которая не лежит на поверхности, но мешает это сделать. Надо искать подводные камни. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2013, 22:20 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
MnioralexeyvgДа, я собственно это и имел в виду.Вы думаете мы всё продумали и можем уже предлагать MS? Мне кажется мы возможно не учли какой-то логичной фишки, которая не лежит на поверхности, но мешает это сделать. Надо искать подводные камни.Думаю, всё учли :-) https://connect.microsoft.com/SQLServer/feedback/details/319134/msft-mso-support-alter-type ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2013, 00:06 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Mnior Гость333Где можно почитать об этом? Вот еле нашёлСобственно на русском . И всё крутится над Внутренними системными представлениями Но вот только так и не понятен принцип. LSN (или TimeStamp/RowVersion) конечно логично, но это не версия, точнее если не меняется весь PAGE, а только строка, то мои изыскания бесплодны. 1. Версия метаданных должна иметь свой LSN 2. Если табла имеет более одной версии, она должна сравнивать LSN последней с LSN страницы и если она больше (Ver>Page), то обновлять всю страницу - что уже жутко: а) блокировки + а какжетюниги - запрет на локировку страниц, а также неизбежное расщепление строк (при DEFAULT) б) возможно нарушение логики (ХЗ) в) скрытое обновление строк может потребовать изменение внутрених механизмов (не обновлять RowVersion). Но с другой стороны - добавление колонки это изменение строки или нет? 3. В случае CHECK ONLINE данные то не меняются - получается что, надо изменять LSN, хотя при этом данные вообще не меняются? (на странице нужно поставить новый LSN, т.к. на ней меняется LSN ) Писать ради этого в журнал страницу бесмысленно. Получается нужно расширять словарь лога? Это батхерт. Надо протестить случай с изменением DEFAULT (удаление его, создание нового с другим значением). alexeyvg MSFT-MSO: Support ALTER TYPE Кул. Но есть ли смысл голосовать за закрытый репорт 2007 года? И там описан случай при логической совместимости (увеличение Var Char, это уже о-го-го). Случай CHECK ONLINE (что я описывал) не рассматривается, а зря. Т.к. с этим можно покрыть почти все изменения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2013, 01:21 |
|
User-Defined Data Types & Rules
|
|||
---|---|---|---|
#18+
Хочу немного описать случай несовместимого изменения (VarChar(200) -> VarChar(100) или BigInt -> Int). Некоторым может показаться сложновато. Это изменение можно разбить на три других: 1) Добавление NOCHECK CONSTRAINT (DataLength([ColChar200]) <= 100 или [ColBigInt] <= MaxInt) - делается мгновенно 2) CHECK CONSTRAINT ONLINE (долго но без останова) 3) Наличие IsTrasted CONSTRAINT-а делает замену типа совместимой - и делается мгновенно. Стратегия . Можно завести разные Suggestion-ы на connection, а далее уже MS не отмажется. 1. Уже работает 2. Уже заведён (но какого хера они его втихаря прикрыли, %и%а%а%сы!) Всё равно голосоум! Как кстати и на "Support ALTER TYPE". 3. Не нашёл, надо видимо писать. На самом деле 3й пункт юзабильный не менее чем 2й. Т.к. можно это расширить на любой уровень - к примеру: Создание другого ограничения, который гарантированно выполняется из-за сущесвующего(их). Это например полезно для каскадного смягчения требований без повторных сканов таблицы. У меня это было нужно несколько раз на продакшине. Кстати, это работает в обоих направлениях. Можно как разьединять ограничения так и соединять в один: (Check(A) OR ID < 1000) + (Check(A) OR ID >= 1000) + (ID NOT NULL) <--> Check(A). Это также можно экстраполировать как псевдо CHECK ONLINE - маленькими кусочками. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2013, 02:00 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1707216]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
251ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 378ms |
0 / 0 |