Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выражение в SQL  [new]
bad_tula
Member

Откуда: Тула
Сообщений: 43
что имеем: есть база данных таблицы хранятся на SQL, приложение написано на Access
в приложении есть некий запрос, самое долго что он делает вычисляет вот эту строку:
Долг: [KolSSA]-nz(DLookUp("Knrs";"subRZPnrs";"IDzs=" & [IDSS]);0)-nz(DLookUp("K41";"subRZP250";"DID=" & [IDSS]);0)
собственно вопрос: как заставить считать значение этой строки не приложение БД, а SQL сервер?
25 июн 13, 15:35    [14480931]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Написать соответствующий sql-запрос на sql-сервер.
25 июн 13, 15:36    [14480946]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
bad_tula
DLookUp
кажется это какой-то Access-овский JOIN
25 июн 13, 15:39    [14480971]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
bad_tula
Member

Откуда: Тула
Сообщений: 43
Гавриленко Сергей Алексеевич
Написать соответствующий sql-запрос на sql-сервер.

это наверное самое лёгкое и логическое решение:)
немного конкретики хотелось бы :(
25 июн 13, 15:39    [14480978]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
bad_tula
немного конкретики хотелось бы :(

нам тоже
25 июн 13, 15:40    [14480982]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
bad_tula
Member

Откуда: Тула
Сообщений: 43
Ivan Durak
bad_tula
немного конкретики хотелось бы :(

нам тоже

спрашивайте!!!
25 июн 13, 15:41    [14480993]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
bad_tula
Ivan Durak
пропущено...

нам тоже

спрашивайте!!!


ну да
25 июн 13, 15:45    [14481038]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Рекомендации, пункты 6 и 4
25 июн 13, 15:45    [14481039]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
bad_tula
Member

Откуда: Тула
Сообщений: 43
Паганель
Рекомендации, пункты 6 и 4

Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
Само приложение написано на Access 2003, доступ к SQL по ODBC
Вопрос(попытка №2)
есть форма источником данных которой является:
SELECT Klients.PsevdKl, S.DateS, S.Akt, S.NS, SS.IDSS, SS.IDt, Klients.TipKl, SS.IDtov, TovKod.KodTov, SS.TovName, [KolSSA]-nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0)-nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0) AS Долг, SS.PrimSS, S.IDS, Klients.IDKl, [Kurs]*[Долг]*[PriceSS] AS Выражение1, TP.IDTP, TP.IDZS, TP.TPPk, TP.TPPIDt, TP.TPP01, TP.TPP02, T.IDTFC, SS.ReservZ, T.NameS, Sotr.Sotrudnik, TP.TPP03, nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0) AS Knrs, nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0) AS K41, DLookUp("Skld","subPrice3N","IDT=" & [SS.IDt]) AS KolSkl FROM Sotr INNER JOIN ((Klients INNER JOIN S ON Klients.IDKl=S.IDkl) INNER JOIN (((SS INNER JOIN TovKod ON SS.IDtov=TovKod.IDTov) LEFT JOIN TP ON SS.IDSS=TP.IDZS) LEFT JOIN T ON TP.TPPIDt=T.IDT) ON S.IDS=SS.IDS) ON Sotr.IDsotr=S.SotrSs WHERE (((S.NS)>104 Or (S.NS)=0) AND ((SS.IDt)<>1 And (SS.IDt)<>2) AND (([KolSSA]-nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0)-nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0))<>0) AND ((SS.ReservZ)=Yes)) ORDER BY Klients.TipKl, SS.IDtov, SS.TovName;
все таблицы хранятся на SQL, самое долгое что выполняется это выражения, хотелось бы заставить считать эти выражения не клиентские машины а SQL сервер, а в форму поставлять уже готовое значение, для начала хотелось бы понять как выражение:
[KolSSA]-nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0)-nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0) AS Долг
заставить работать на SQL, остальное по аналогии уже понятно будет.
все поля и значения типа INT
subRZPnrs, subRZP250 - вспомогательные запросы в Access (так же существуют как виды в SQL, не подключены к приложению Access)
25 июн 13, 16:06    [14481227]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
и где
автор
- скрипты создания таблиц;
- скрипты заполнения этих таблиц тестовыми данными;
- описание желаемого результата на примере тестовых данных.

???
25 июн 13, 16:07    [14481237]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
bad_tula
SELECT Klients.PsevdKl, S.DateS, S.Akt, S.NS, SS.IDSS, SS.IDt, Klients.TipKl, SS.IDtov, TovKod.KodTov, SS.TovName, [KolSSA]-nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0)-nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0) AS Долг, SS.PrimSS, S.IDS, Klients.IDKl, [Kurs]*[Долг]*[PriceSS] AS Выражение1, TP.IDTP, TP.IDZS, TP.TPPk, TP.TPPIDt, TP.TPP01, TP.TPP02, T.IDTFC, SS.ReservZ, T.NameS, Sotr.Sotrudnik, TP.TPP03, nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0) AS Knrs, nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0) AS K41, DLookUp("Skld","subPrice3N","IDT=" & [SS.IDt]) AS KolSkl FROM Sotr INNER JOIN ((Klients INNER JOIN S ON Klients.IDKl=S.IDkl) INNER JOIN (((SS INNER JOIN TovKod ON SS.IDtov=TovKod.IDTov) LEFT JOIN TP ON SS.IDSS=TP.IDZS) LEFT JOIN T ON TP.TPPIDt=T.IDT) ON S.IDS=SS.IDS) ON Sotr.IDsotr=S.SotrSs WHERE (((S.NS)>104 Or (S.NS)=0) AND ((SS.IDt)<>1 And (SS.IDt)<>2) AND (([KolSSA]-nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0)-nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0))<>0) AND ((SS.ReservZ)=Yes)) ORDER BY Klients.TipKl, SS.IDtov, SS.TovName;
Как вы в таком виде читаете текст программы??? Убиться можно!


bad_tula
для начала хотелось бы понять как выражение:
[KolSSA]-nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0)-nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0) AS Долг
заставить работать на SQL, остальное по аналогии уже понятно будет.
Ну, мы тут аксесса не знаем.

Арифметические операции в MSSQL такие же - всякие плюсы, минусы и т.д.
DLookUp - это наверное джойн к справочнику, см. JOIN
nz - не знаю, что такое.

Поэксперементируйте для начала на маленьких запросах, то есть просто поучите T-SQL на примерах
В выражениях ничего сложного нет, всё как во всех языках программирования.
25 июн 13, 17:31    [14481968]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
alexeyvg
nz - не знаю, что такое.

Поэксперементируйте для начала на маленьких запросах, то есть просто поучите T-SQL на примерах
В выражениях ничего сложного нет, всё как во всех языках программирования.

NZ == ISNULL()
25 июн 13, 18:00    [14482107]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
qwerty112
Guest
Паганель
bad_tula
DLookUp
кажется это какой-то Access-овский JOIN

нее, это функция "типа подзапрос" ))

ТС,

если "буквально", то вот это
...
nz(DLookUp("Knrs","subRZPnrs","IDzs=" & [IDSS]),0) AS Knrs, 
nz(DLookUp("K41","subRZP250","DID=" & [IDSS]),0) AS K41,

будет так
...
isnull((select top 1 [Knrs] from [subRZPnrs] where [subRZPnrs].[IDzs]=SS.IDSS),0) AS Knrs, 
isnull((select top 1 [K41] from [subRZP250] where [subRZP250].DID=SS.IDSS),0) AS K41,


но это всё как-то неправильно ...
тут Left join должен быть этих таблиц ([subRZPnrs], [subRZP250] ) к таб. SS
или outer apply их же, если нужно брать одну из нескольких соотв.записей ...
25 июн 13, 18:05    [14482131]     Ответить | Цитировать Сообщить модератору
 Re: Выражение в SQL  [new]
HelenM
Member

Откуда: Москва
Сообщений: 53
Самое простое - в базе на SQL Server'е создать хранимую процедуру с параметрами.
Входные параметры процедура будет получать от Access, а выходные - возвращать.

Примеров здесь на форуме достаточно.
синтаксис T-SQL подробно описан в BOL
26 июн 13, 10:37    [14484340]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить