SELECT b1.a1, b1.a2
FROM base1 AS b1 LEFT JOIN base2 AS b2 ON b1.a1 = b2.rrr
WHERE b1.a2 = '1'
OR b1.a2 = '3'
как побороть преобразование в конструкторе вида
select top(100) percent a1,a2
from base as b
where a1 in (select rrr from base2) and (a2='1' or a3='2')
это всё работает на УРА и шустро
когда перетаскивается сей запрос в конструктор вида, конструктор преобразует его в вид
select top(100) percent a1,a2
from base as b
where (a1 in (select rrr from base2) and a2='1') or (a1 in (select rrr from base2) and a3='2')
... ну вроде того...
и работает это МЕДЛЕННО, потому что выборка делается в этом случае ДВАЖДЫ (?)
как победить это преобразование? и что это вообще такое?
SELECT TOP (1000) CreditVid, SsudaAccountN, SsudaDateBeg, SsudaDateEnd, ProsrDateDolg, ProsrDateProc, ClientFIO
FROM dbo.kf
WHERE (CreditVid IN (select [type] from ssuda_types where ssuda ='1'))
AND SsudaDateEnd<GETDATE()
and (DATEDIFF(day,ProsrDateDolg,GETDATE())<30 or DATEDIFF(day,ProsrDateProc,GETDATE())<30)
всё путем - быстро работает и даёт то, что надо
затем решил создать вид. вставил всё вышеуказанное в конструктор видов и получил ВОТ ТАКОЕ
SELECT TOP (1000) creditvid, ssudaaccountn, ssudadatebeg, SsudaDateEnd, ProsrDateDolg, ProsrDateProc, clientfio
FROM dbo.kf
WHERE (creditvid IN
(SELECT type
FROM dbo.ssuda_types
WHERE (ssuda = '1'))) AND (SsudaDateEnd < GETDATE()) AND (DATEDIFF(day, ProsrDateDolg, GETDATE()) < 30 OR
DATEDIFF(day, ProsrDateProc, GETDATE()) < 30) OR
(creditvid IN
(SELECT type
FROM dbo.ssuda_types AS ssuda_types_2
WHERE (ssuda = '1'))) AND (SsudaDateEnd < GETDATE()) AND (ProsrDateDolg IS NULL) OR
(creditvid IN
(SELECT type
FROM dbo.ssuda_types AS ssuda_types_1
WHERE (ssuda = '1'))) AND (SsudaDateEnd < GETDATE()) AND (ProsrDateProc IS NULL)
это последнее работает ... ОЧЕНЬ медленно и я не совсем уверен, что это ТО ЖЕ САМОЕ...
ВОПРОС: как сделать, чтобы конструктор видов не изобретал своё?
Цитата: Drew
ВОПРОС: как сделать, чтобы конструктор видов не изобретал своё?
Сделать с нуля все тоже что и там. Конструктор не любит вложенных запросов. Он заточен на JOIN-ы.
а JOIN.... мне не нужен здесь JOIN...
мне нужен именно фильтр
Код:
CREATE VIEW [dbo].[vw_MyViewName]
AS
SELECT TOP (1000) CreditVid, SsudaAccountN, SsudaDateBeg, SsudaDateEnd, ProsrDateDolg, ProsrDateProc, ClientFIO
FROM dbo.kf
WHERE (CreditVid IN (select [type] from ssuda_types where ssuda ='1'))
AND SsudaDateEnd<GETDATE()
and (DATEDIFF(day,ProsrDateDolg,GETDATE())<30 or DATEDIFF(day,ProsrDateProc,GETDATE())<30)
AS
SELECT TOP (1000) CreditVid, SsudaAccountN, SsudaDateBeg, SsudaDateEnd, ProsrDateDolg, ProsrDateProc, ClientFIO
FROM dbo.kf
WHERE (CreditVid IN (select [type] from ssuda_types where ssuda ='1'))
AND SsudaDateEnd<GETDATE()
and (DATEDIFF(day,ProsrDateDolg,GETDATE())<30 or DATEDIFF(day,ProsrDateProc,GETDATE())<30)
завтра попробую - должно сработать!
да! кстати! Вот В ТАКОМ виде преобразования не происходит:
SELECT TOP (1000) CreditVid, SsudaAccountN, SsudaDateBeg, SsudaDateEnd, ProsrDateDolg, ProsrDateProc, ClientFIO
FROM dbo.kf
WHERE (CreditVid IN (select [type] from ssuda_types where ssuda ='1'))
AND SsudaDateEnd<GETDATE()
and (DATEDIFF(day,ProsrDateDolg,GETDATE())<30 or DATEDIFF(day,ProsrDateProc,GETDATE())<30)
преобразовывать он его начинает тогда, когда добавляешь
SELECT TOP (1000) CreditVid, SsudaAccountN, SsudaDateBeg, SsudaDateEnd, ProsrDateDolg, ProsrDateProc, ClientFIO
FROM dbo.kf
WHERE (CreditVid IN (select [type] from ssuda_types where ssuda ='1'))
AND SsudaDateEnd<GETDATE()
and (DATEDIFF(day,ProsrDateDolg,GETDATE())<30 or DATEDIFF(day,ProsrDateProc,GETDATE())<30 or ProsrDateDolg is not null)
да! не в курсе, как сделать, чтобы исполнение вида (по команде "открыть") не завершалось по таймауту?
в свойствах сервера, В Connections у меня стоИт "0" (там где было 600).
Query отрабатывает без таймаута, а вид открывается с ругательством.
Цитата: Drew
спасибо за совет! у меня видно заколодило!
да! не в курсе, как сделать, чтобы исполнение вида (по команде "открыть") не завершалось по таймауту?
в свойствах сервера, В Connections у меня стоИт "0" (там где было 600).
Query отрабатывает без таймаута, а вид открывается с ругательством.
да! не в курсе, как сделать, чтобы исполнение вида (по команде "открыть") не завершалось по таймауту?
в свойствах сервера, В Connections у меня стоИт "0" (там где было 600).
Query отрабатывает без таймаута, а вид открывается с ругательством.
Не знаю. Я Sql Server Management Studio 2008 пользуюсь (экспрессом), вроде таких проблем с вьюхами не встречал, да у меня и базы-то не слишком большие.