Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Пример отсюда:

Есть таблийа с CLR типом. Вставляем строку.
INSERT INTO Points (PointValue) VALUES (CONVERT(Point, '3,4')) --1

Вывод двоичного значения определяемого пользователем типа.
SELECT ID, PointValue FROM Points  --2

Чтобы просмотреть выходные данных в удобном для чтения формате, вызовите метод ToString...
SELECT ID, PointValue.ToString() AS PointValue FROM Points --3


Есть ли возможность чтобы "читабельный" формат выдавался по умолчанию, т.е. при вызове команды под номером 2?
Без триггеров и видов.
16 июн 15, 16:53    [17777689]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Выдавался где? В студии? А откуда студия должна быть в курсе, как ваш классный Point преобразовывать в читабельный вид?
16 июн 15, 16:56    [17777703]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Гавриленко Сергей Алексеевич
Выдавался где? В студии? А откуда студия должна быть в курсе, как ваш классный Point преобразовывать в читабельный вид?


- везде
- для этого мог бы использоваьтся какой нибудь атрибут, например DefaultProperty.

Цель упражнения: ввести сжатие столбца без внесения изменеий в клиентские приложения.
Cервер: SQL2005 64bit
16 июн 15, 17:01    [17777732]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Сделайте вычисляемое поле в таблице, в котором будет ToString, го и выбирайте.
16 июн 15, 17:04    [17777755]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Гавриленко Сергей Алексеевич
Сделайте вычисляемое поле в таблице, в котором будет ToString, го и выбирайте.


С селектом будет ок, а как с инсертом?
Приложения то не знают, что тип изменился.
16 июн 15, 17:13    [17777811]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Alexander Us,

Следующая инструкция SELECT выбирает двоичное значение определяемого пользователем типа.
SELECT ID, PointValue FROM dbo.Points

Чтобы просмотреть выходные данных в удобном для чтения формате, вызовите метод ToString определяемого пользователем типа Point, который преобразует значение в строковое представление.
SELECT ID, PointValue.ToString() AS PointValue 
FROM dbo.Points;
16 июн 15, 18:14    [17778165]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
a_voronin,

спасибо конечно, но Вы скопировали тот же самый абзац из доку, который скопировал я в пером посте.

Вопрос как раз заключается в поиску волможности переопределить это поведение:
Т.е. хотелось бы, чтобы следующая инструкция возвращала не двоичное значение, на например значение .ToString().
SELECT ID, PointValue FROM dbo.Points
Но как я теперь думаю, это невозможно напрямую, без вычисляемых столбцов т.д.
17 июн 15, 10:07    [17780279]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Т.е. хотелось бы, чтобы следующая инструкция возвращала не двоичное значение, на например значение .ToString().

Откуда сервер узнает, что ему нужно возвращать не то, что он возвращает ?
17 июн 15, 10:14    [17780318]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
Alexander Us
Т.е. хотелось бы, чтобы следующая инструкция возвращала не двоичное значение, на например значение .ToString().

Откуда сервер узнает, что ему нужно возвращать не то, что он возвращает ?


- для этого мог бы использоваьтся какой нибудь атрибут, например DefaultProperty. По моему это было бы логично.
17 июн 15, 10:30    [17780413]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
для этого мог бы использоваьтся какой нибудь атрибу

и где должен хранится этот атрибут ?
17 июн 15, 10:31    [17780425]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
Alexander Us
для этого мог бы использоваьтся какой нибудь атрибу

и где должен хранится этот атрибут ?


Ну это же ясно, на уровне декларации класса:
<Serializable()> _
<SqlUserDefinedType(Format.UserDefined, IsByteOrdered:=True, MaxByteSize:=4000)> _
<DefaultProperty("MyDefaultProp")> _   <<<<<  например ТУТ
Public Class myTyp
    Implements IBinarySerialize, INullable


Или это могло бы быть доп. свойством класса SqlUserDefinedTypeAttribute:

<SqlUserDefinedType(Format.UserDefined, IsByteOrdered:=True, MaxByteSize:=4000, DefaultProperty:="MyDefaultProp")> _
17 июн 15, 11:07    [17780675]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Alexander Us
Glory
пропущено...

и где должен хранится этот атрибут ?


Ну это же ясно, на уровне декларации класса:
<Serializable()> _
<SqlUserDefinedType(Format.UserDefined, IsByteOrdered:=True, MaxByteSize:=4000)> _
<DefaultProperty("MyDefaultProp")> _   <<<<<  например ТУТ
Public Class myTyp
    Implements IBinarySerialize, INullable



Или это могло бы быть доп. свойством класса SqlUserDefinedTypeAttribute:

<SqlUserDefinedType(Format.UserDefined, IsByteOrdered:=True, MaxByteSize:=4000, DefaultProperty:="MyDefaultProp")> _
Вы можете здесь на форуме фантазировать сколько угодно, как было бы классно, если бы корабли бороздили космическое пространство. Но, к сожалению, у вас есть два варианта - отправить свюою хотелку на коннект с железобетонным основанием, почему вы без нее не можете жить, подождать лет пять, пока ее реализуют и радоваться, или пользоваться тем, что есть.

Не подходят вам CLR-типы, не используте их.
17 июн 15, 11:12    [17780723]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Ну это же ясно, на уровне декларации класса:

Т.е. для тех запросов, которые заходят другое представление значения все равно придется переписывать запрос ?
17 июн 15, 11:13    [17780731]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Гавриленко Сергей Алексеевич
Вы можете здесь на форуме фантазировать сколько угодно, как было бы классно, если бы корабли бороздили космическое пространство. Но, к сожалению, у вас есть два варианта - отправить свюою хотелку на коннект с железобетонным основанием, почему вы без нее не можете жить, подождать лет пять, пока ее реализуют и радоваться, или пользоваться тем, что есть.

Не подходят вам CLR-типы, не используте их.


Это Вы (и Глори) сами меня спросили "и где должен хранится этот атрибут?".
Если Вас интересуют мои финтазии - пожалуйста, отвечу.
17 июн 15, 11:47    [17780995]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
Alexander Us
Ну это же ясно, на уровне декларации класса:

Т.е. для тех запросов, которые заходят другое представление значения все равно придется переписывать запрос ?


Конечно.
Мне только хотелось переопределить "стандартное" поведение.
17 июн 15, 11:49    [17781015]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Glory
пропущено...

Т.е. для тех запросов, которые заходят другое представление значения все равно придется переписывать запрос ?


Конечно.
Мне только хотелось переопределить "стандартное" поведение.

Ну так вы и сейчас свой запрос можете переписать
А "стандартное" поведение получить переписав свой CLR
17 июн 15, 11:54    [17781049]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
Ну так вы и сейчас свой запрос можете переписать
А "стандартное" поведение получить переписав свой CLR


Как раз вопрос и был в том, есть ли возможность изменить тип столбца с например varchar(8000) на CLR "myType" не меняя ничего в запросах.

ISNERT myTab(Col1) VALUES('HALLO WORLD')
SELECT Col1 FROM myTab --> должно выдавать 'HALLO WORLD' а не бинарное значение


Цель сия упражнения: ввести сжатие столбца без внесения изменеий в клиентские приложения.
Cервер: SQL2005 64bit
17 июн 15, 12:09    [17781210]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Как раз вопрос и был в том, есть ли возможность изменить тип столбца с например varchar(8000) на CLR "myType" не меняя ничего в запросах.

Командой ALTER TABLE ?
17 июн 15, 12:13    [17781253]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
Alexander Us
Как раз вопрос и был в том, есть ли возможность изменить тип столбца с например varchar(8000) на CLR "myType" не меняя ничего в запросах.

Командой ALTER TABLE ?


Glory, на SQL2005 сжатие данных, тем более отдельных столбцов не поддерживается.

Поэтому я собирался написать CLR тип, которых хранил бы данные в сжатом виде.
Но к сожалению, не вижу возможности изменить тип столбца без изменения клиентского приложения.

Т.е. в приложениях пришлось бы менять
SELECT Col1 FROM myTab
на
SELECT Col1.ToString() FROM myTab


PS: если ни у кого нет конкретных предложений, прошу закрыть тему.
17 июн 15, 12:27    [17781377]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Glory, на SQL2005 сжатие данных, тем более отдельных столбцов не поддерживается.

Поэтому я собирался написать CLR тип, которых хранил бы данные в сжатом виде.

По-моему, вы путаете хранение и отображение данных.
Например, тип данных datetime хранится как два int, а отображается совсем по-другому
17 июн 15, 12:29    [17781406]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Alexander Us,

Сделайте вьюху Points с INSTEAD OF INSERT , UPDATE, DELETE триггерами

а во вьюхе

Create View Points AS 
SELECT Points.ToString() AS Points ... FROM Points_PhysicalTable 
17 июн 15, 12:32    [17781439]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
a_voronin
Alexander Us,

Сделайте вьюху Points с INSTEAD OF INSERT , UPDATE, DELETE триггерами

а во вьюхе

Create View Points AS 
SELECT Points.ToString() AS Points ... FROM Points_PhysicalTable 


Спасибо конечно, но я же написал в самом начале Без триггеров и видов
17 июн 15, 12:35    [17781474]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Спасибо конечно, но я же написал в самом начале Без триггеров и видов

Вы хотите силой мысли заставить сервер возращать нужные данные ? Вообще ничего не сделав ?
17 июн 15, 12:37    [17781492]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
По-моему, вы путаете хранение и отображение данных.
Например, тип данных datetime хранится как два int, а отображается совсем по-другому


Нет не путаю.

CLR хранит сериализованные бинарные данные.
Я хотел только, чтобы в методе
Public Shared Function Parse(ByVal s As SqlString) As myTyp
данные сжимались и запиховались в сжатом виде в приватное поле.

В Методе
Public Overrides Function ToString() As String
данные из приватного поля бы разжимались и выдавались как строка.

Мне не хватает только возможности, чтобы ToString (или другой метод/свойство) вызывалась по умолчанию, при запросе
SELECT Col1 FROM myTab


Тогда можно было бы заменить тип столбца с varchar(8000) на myTyp и клиентское приложение бы ничего не заметило, а данные хранились бы в сжатом виде.
17 июн 15, 12:48    [17781596]     Ответить | Цитировать Сообщить модератору
 Re: Тюнинг CLR Типа  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Glory
Alexander Us
Glory, на SQL2005 сжатие данных, тем более отдельных столбцов не поддерживается.

Поэтому я собирался написать CLR тип, которых хранил бы данные в сжатом виде.

По-моему, вы путаете хранение и отображение данных.
Например, тип данных datetime хранится как два int, а отображается совсем по-другому


Проблема, которую пытается решить ТС в другом. Если заменить тип INT на Smallint и значения в него влазят, то ничего нигде менять не надо. Только тип более хитрый
17 июн 15, 12:49    [17781600]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить