01.09.2006, 21:04 | #1 |
Участник
|
Работаю с Navision на SQL Server 2000, но в целях ускорения работы возникла необходимость работать напрямую с SQL Server`ом через Automation Microsoft ActiveX Data Objects 2.8 Library. Проблема в следующем - забитые гвоздями в хранимой процедуре имена таблиц в виде
<Companyname>$<Tablename> не позволят универсально функционировать на всех фирмах. Хочется иметь возможность передавать имя фирмы в виде текстового параметра и в зависимости от его значения копаться в разных таблицах. Каким образом можно реализовать подобное? з.ы. формирование и запись запроса в строковую переменую для последующего вызова как на уровне Navision, так и на уровне SQL Server не подходит из-за большого объёма запроса. Максимальная строка в Navision ведь 1024, а в SQL кажется 8000. |
|
04.09.2006, 03:58 | #2 |
Участник
|
Ну, может попробовать написать свою хранимую процедуру.
|
|
04.09.2006, 06:56 | #3 |
Участник
|
однозначно свои ХП и функции... на каждую из компаний :-)
т.е. создаем табличку с текстами этих ХП и функций и на таблицу Company вешаем триггер: при создании новой компании запуск скриптов по созданию нужных объектов на каждую новую компанию. во как! :-)
__________________
YEP! тел. (905) 561-94-00 |
|
04.09.2006, 10:49 | #4 |
Участник
|
бугага. прочитай вопрос ещё раз
всё верно, но тебе не кажется что это изврат? |
|
04.09.2006, 18:19 | #5 |
Участник
|
Цитата:
всё верно, но тебе не кажется что это изврат?
__________________
YEP! тел. (905) 561-94-00 |
|
08.09.2006, 23:16 | #6 |
Заноза в заднице
|
Изврат однозначно. К тому же не обойтись без хардкода.
Тема: подумай, как запрос разбить на подзапросы. Ну к примеру: там, где нужно обращаться к таблицам разных фирм - формируй строку запроса в Navi, а там, где данные в привязке к фирме уже не имеют значения - ваяй ХП (если это конечно возможно) и дёргай их в нужные моменты, передавая значения, полученые запросом, сгенеренным в Navi. Короче, тут совет может быть такого рода: пробуй комбинировать. Хотя, конечно, можно слабать внешнюю компоненту, в которую текст запроса передавать блоками по 1024 символа, а после того, как набор блоков передан - запускать метод компоненты, который вызовет исполнение собранного из блоков запроса. Это тоже изврат, но менее прибацаный.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
14.09.2006, 10:53 | #7 |
Ищу людей. Дорого.
|
Я делал следующим образом. Для каждой фирмы была написана процедура, с названием фирмы в названии процедуры. (Фирмы были названы англ буквами, если у вас Русские буквы используйте [...])
CREATE proc sp_xxx ( @firm varchar(10), @param varchar(10) ) as DECLARE @SQLString NVARCHAR(500),@ParmDefinition NVARCHAR(500) SET @SQLString = N' exec sp_xxx_'+@firm +' @param' SET @ParmDefinition = N'@param varchar(10)' EXECUTE sp_executesql @SQLString, @ParmDefinition, @param=@param а каждая процедура работала уже с таблицами конкретной фирмы Все понятно?? вместо @param можно передавать сколь угодно переменных, главное, что бы размер строки не был превышен.. Или можно извратиться и написать универсальную процедуру. и подставлять в вызовах уже названия таблиц. А если вызовы происходят редко, можно вначале создать вьюхи на нужную фирму с универсальными названиями (т.е. без назв фирмы вначале). а потом процедурой работать с таблицами через вьюхи.. Грохаешь созданные вьюхи. Создаешь для другой фирмы и т.д. Версий много.. Копайте господа )) |
|