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

Откуда:
Сообщений: 96
Подскажите, возможно ли в assembly процедуру передать табличную переменную ? Если кто сталкивался с этим, киньте примерчик, спасибо.
18 май 12, 14:16    [12577112]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Не могли бы Вы огласить задачу?
18 май 12, 14:30    [12577243]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
aleonov
Подскажите, возможно ли в assembly процедуру передать табличную переменную ? Если кто сталкивался с этим, киньте примерчик, спасибо.

Табличный тип можно. Зачем вам ?
18 май 12, 14:39    [12577327]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
Задача создать библиотеку для специфичного анализа данных. Например, обработка строк идет во много раз быстрее, если делать ее в assembly. Ниже привожу кусок кода из библиотеки, чтобы было понятно о чем идет речь.

using System.Collections;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public static class LCS
{
// Diff
[SqlFunction(FillRowMethodName = "DiffFillRow",
TableDefinition = "id1 int, id2 int")]
public static IEnumerator CLR_Diff(SqlString txt1, SqlString txt2, SqlString delimeter)
{
TextParser tp1 = new TextParser(txt1, delimeter);
TextParser tp2 = new TextParser(txt2, delimeter);

return new Diff(tp1, tp2);
}

// Fill in output record set for CLR_Diff
private static void DiffFillRow(object row, out SqlInt32 id1, out SqlInt32 id2)
{

Diff s = (Diff)row;
id1 = s.id1;
id2 = s.id2;

}
....

далее сборка грузится в скуль create assembly myassembly from ... объявляются функции create function myfuncname ( @str1 nvarchar(max), @str2 nvarchar(max), @delimiter nvarchar(max)) returns table (id1 int null, id2 int null) with execute as caller as external name myassembly.[LCS].[CLR_Diff] ну и т.д.

Вопрос в том, можно ли передать в assembly процедуру вместо скажем текста табличную переменную? Если кто знает, киньте работающим примером, плиз.
18 май 12, 15:07    [12577633]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
aleonov
Подскажите, возможно ли в assembly процедуру передать табличную переменную ?

Нет table-none
Если религия не запрещает,то в в виде xml,можно попробовать.
18 май 12, 15:25    [12577861]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

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

спасибо. религия не запрещает, но в xml еще не все баги исправлены, на больших объемах глючит.
18 май 12, 15:45    [12578156]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
RubinDm
Member

Откуда:
Сообщений: 461
aleonov
denis2710, ... в xml еще не все баги исправлены, на больших объемах глючит.

пруфлинки будут?

Если заглянуть сюда, то можно предположить, что типы аргументов сильно ограничены. Т.е. аргументами могут быть только типы, прописанные в .NET Framework SqlTypes. Но я не уверен в этом на все сто, надо копать.
18 май 12, 15:50    [12578241]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
aleonov,
aleonov
о в xml еще не все баги исправлены

Реально интересно,что имеется ввиду.
18 май 12, 15:55    [12578315]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
denis2710
aleonov,
aleonov
о в xml еще не все баги исправлены

Реально интересно,что имеется ввиду.


имеется ввиду 'обрезание' больших xml.
18 май 12, 16:24    [12578718]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
RubinDm
Member

Откуда:
Сообщений: 461
aleonov
denis2710
aleonov,
пропущено...

Реально интересно,что имеется ввиду.


имеется ввиду 'обрезание' больших xml.


А не могли бы Вы показать конкретный пример 'обрезания'? очень интересно было бы посмотреть...
18 май 12, 16:36    [12578822]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
aleonov,
не встречал..
А что вы имеете ввиду под большим xml(размер)?
18 май 12, 16:37    [12578825]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
RubinDm
aleonov
пропущено...


имеется ввиду 'обрезание' больших xml.


А не могли бы Вы показать конкретный пример 'обрезания'? очень интересно было бы посмотреть...


ха-ха, забавно, я просил помочь передать массив записей в assembly процедуру. совет был использовать SQLXml тип, если религия позволяет, в итоге Вы меня просите показать конкретный пример ?! :-) если у Вас есть работающий пример, для моего случая, запостите буду признателен.
18 май 12, 16:48    [12578899]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
RubinDm
Member

Откуда:
Сообщений: 461
aleonov, мне известна весьма специфическая проблема обрезания "больших" значений при передаче их в clr-процедуры и обратно в t-sql. Но это проблема не XML, это проблема автоматизированного deploy'а ваших clr-сборок на сервер средствами VS, в которой вы разрабатывали сборку. Если Вы об этом, то я могу рассказать, как такой deploy вылечивается (не сложно).
18 май 12, 16:56    [12578972]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
aleonov,
автор
но в xml еще не все баги исправлены, на больших объемах глючит.

Разве это не предполагает,что вы уже работали с xml?
Или вам это сказал сосед,дворника вашей уборщицы?
Обращайтесь к гуглу или в раздел работа.
18 май 12, 16:57    [12578981]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
denis2710
aleonov,
не встречал..
А что вы имеете ввиду под большим xml(размер)?


несколько сотен мб
18 май 12, 17:00    [12579007]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
RubinDm
aleonov, мне известна весьма специфическая проблема обрезания "больших" значений при передаче их в clr-процедуры и обратно в t-sql. Но это проблема не XML, это проблема автоматизированного deploy'а ваших clr-сборок на сервер средствами VS, в которой вы разрабатывали сборку. Если Вы об этом, то я могу рассказать, как такой deploy вылечивается (не сложно).


отлично. я пока с этим еще не сталкивался, деплою сборку на сервер средствами SQL. расскажите, это интересно.
18 май 12, 17:03    [12579028]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
denis2710
aleonov,
автор
но в xml еще не все баги исправлены, на больших объемах глючит.

Разве это не предполагает,что вы уже работали с xml?
Или вам это сказал сосед,дворника вашей уборщицы?
Обращайтесь к гуглу или в раздел работа.


вот уж никогда не знаешь на кого нарвешься :-) с xml я работал и достаточно плотно. А совет насчет использования SQLXml я надеюсь основан на Вашем личном опыте ? ;-)
18 май 12, 17:07    [12579046]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
RubinDm
Member

Откуда:
Сообщений: 461
aleonov
RubinDm
aleonov, мне известна весьма специфическая проблема обрезания "больших" значений при передаче их в clr-процедуры и обратно в t-sql. Но это проблема не XML, это проблема автоматизированного deploy'а ваших clr-сборок на сервер средствами VS, в которой вы разрабатывали сборку.
отлично. я пока с этим еще не сталкивался

Т.е. Вы имели ввиду еще какие-то, иные, известные Вам (не мне) проблемы с обрезкой "больших" XML? Или Вам все-таки просто кажется, что проблемы могут быть? Если кажется, то, скорее всего, зря. XML - это уже как гравитация. Если с ней что-то не так, то это мгновенно исправляется, ибо слишком много на такой гравитации построено и низя чтоб развалилось.

aleonov
деплою сборку на сервер средствами SQL

это как, если не секрет? т.е. deploy'ем из VS вы НЕ пользуетесь?
сборки в SQL руками (скриптами) заталкиваете? Так тоже можно.

aleonov
RubinDm
Если Вы об этом, то я могу рассказать, как такой deploy вылечивается (не сложно).
расскажите, это интересно.

Расскажу, если Вы все-таки пользуетесь deploy'ем из VS.
18 май 12, 17:19    [12579120]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
aleonov
несколько сотен мб

Тут явно ошибка в системе. Зачем впихивать данные в CLR процедуру в таком количестве ?
Покажите "Модель движения данных" вашей системы.
18 май 12, 17:19    [12579121]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Всем остальным про XML - Не учите людей плохому!
Если в системе табличная XML, значит вы не понимаете для чего XML нужен.
Загружать бесполезными преобразованиями систему ...
18 май 12, 17:23    [12579147]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
RubinDm
aleonov
пропущено...
отлично. я пока с этим еще не сталкивался

Т.е. Вы имели ввиду еще какие-то, иные, известные Вам (не мне) проблемы с обрезкой "больших" XML? Или Вам все-таки просто кажется, что проблемы могут быть? Если кажется, то, скорее всего, зря. XML - это уже как гравитация. Если с ней что-то не так, то это мгновенно исправляется, ибо слишком много на такой гравитации построено и низя чтоб развалилось.

aleonov
деплою сборку на сервер средствами SQL

это как, если не секрет? т.е. deploy'ем из VS вы НЕ пользуетесь?
сборки в SQL руками (скриптами) заталкиваете? Так тоже можно.

aleonov
пропущено...
расскажите, это интересно.

Расскажу, если Вы все-таки пользуетесь deploy'ем из VS.


с обрезкой xml в ms sql лично не сталкивался, да и объемы были небольшие. народ который пользует xml в сборках пишет что где-то что-то режется, поэтому перед тем как начать что-либо делать в этом направлении, хотелось бы услышать мнение тех кто этим пользуется. насчет гравитации ассоциация красивая, что ж попробую потом отпишусь.

заталкиваю сборку скриптом, на локальном сервере просто из файла, на удаленном читая файл в бинарную переменнную, т.е получается что-то вроде сreate assembly name from ox123AC23.....
18 май 12, 17:34    [12579223]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
Mnior
aleonov
несколько сотен мб

Тут явно ошибка в системе. Зачем впихивать данные в CLR процедуру в таком количестве ?
Покажите "Модель движения данных" вашей системы.




Затем что обработка строк и работа с памятью в CLR на порядок быстрее. Можно вместо движения данных системы я опишу задачу номер 1 ?

Дано: табличка T1 (id int), табличка Т2 (int)
Найти: наибольшую общую подпоследовательность данных в T1 и Т2

Пример 1.
T1 T2
1 76
23 11
8 1
9 2
0 8

Общая подпоследовательность 1, 8

Пример 2.
T1 T2
1 76
23 11
8 8
9 2
0 1

Общая подпоследовательность 8


Предложите решение.
18 май 12, 17:48    [12579336]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

Откуда:
Сообщений: 96
Mnior
Если в системе табличная XML, значит вы не понимаете для чего XML нужен.
Загружать бесполезными преобразованиями систему ...


Из первого не следует второе, это может означать например, что других способов нет.
18 май 12, 17:50    [12579350]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
RubinDm
Member

Откуда:
Сообщений: 461
aleonov, я не смог вывести определение "общей последовательности" из приведенных примеров, потому не могу предложить решения. но clr тут не нужен, имхо.
18 май 12, 19:12    [12579815]     Ответить | Цитировать Сообщить модератору
 Re: Передача табличной переменной в assembly процедуру  [new]
aleonov
Member

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

Дополнительные объяснения все дальше и дальше уводят от темы топика. Это задача широко известна для сравнения текстов как long common sequence. Мне же нужно, аналогичным образом сравнить данные в таблицах. Если решать в лоб без привлечения clr сравнение двух табличек размером 10к записей на сервере с двумя десятками цпу занимает около 7 минут, clr на рабочей станции 4 цпу выполняет тоже самое за 3 секунды
18 май 12, 19:31    [12579862]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить