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

Откуда: Москва
Сообщений: 4262
Столкнулся со странным случаем.
Есть запрос, обычный селект, который хочу поместить во view.
CREATE VIEW выполняется без ошибок, но количество полей меньше, чем в исходном селекте.
Наименования полей не повторяются, да он и обругался бы.
Полей немного в общем-то, порядка 80-90. Но в реальности менее 70-ти.
Кто сталкивался с таким "чудом"?
22 май 15, 12:59    [17676275]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
CREATE VIEW выполняется без ошибок, но количество полей меньше, чем в исходном селекте.

И как вы определили это самое количество полей ?
22 май 15, 13:01    [17676296]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
А нефиг * во view писать, а потом поля добавлять в таблицу.
22 май 15, 13:01    [17676298]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
Jaffar
Member

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

Щас свангую - ты запятые забыл поставить после некоторых,

поэтому поле COL23 стало наименовываться COL24, но данные в нем из 23.

А вообще-то выложи скрипт.
22 май 15, 13:02    [17676307]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
o-o
Guest
sp_refreshview сделайте и снова посчитайте
22 май 15, 13:06    [17676355]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Разобрался с чудесами
Часть полей, те что "пропали", являются подселектами.
Разумеется, если нет в них записей, то и самого поля нет


Часто задав вопрос, ты формулируешь его для других и причина проблемы становится очевидной!
Но все равно всем спасибо!
22 май 15, 13:09    [17676377]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Хотя конечно странно...
Мне казалось, что метаданные должны формироваться исходя из структуры запроса, а не возвращаемых данных.
22 май 15, 13:13    [17676414]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
o-o
Guest
нет
create table dbo.t1 (id int, col int);
insert dbo.t1 values (1, 1);

create view dbo.vw_test as
select id, col, (select col from dbo.t where id = 2) as col2
from dbo.t1;

select *
from dbo.vw_test;
---
id	col	col2
1	1	NULL
22 май 15, 13:16    [17676437]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
o-o
Guest
в смысле "нет" на "пропадение столбцов, когда поздапрос ничего не вернул"
22 май 15, 13:18    [17676442]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
o-o, да-да! Тоже так считал.


Еще раз пересмотрю скрипт, возможно, что что-то пропустил.
22 май 15, 13:18    [17676445]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
Jaffar
Member

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

правильно расставь запятые и будет все хорошо
22 май 15, 13:24    [17676465]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Эпопея не закончена.
Вот кусок запроса
   (select min(k.length)  
     from [SPD_ERW].[dbo].[DIM_ASSEMBLY_ITEM] k,
     [SPD_ERW].[dbo].FACT_ASSEMBLY_ITEM_INSTALLATION v
     where v.fk_assembly_item=k.pk_assembly_item
     and v.fk_well=dbo.DIM_WELL.PK_WELL
     and k.ASSEMBLY_ITEM_TYPE = 'PKR'
     and  k.hist = 0 and k.deleted = 0 
     and (v.INSTALLED_AT <= dbo.FACT_WORK_ACTIVITY.DATE_END)
     AND (v.PULLED_AT >= dbo.FACT_WORK_ACTIVITY.DATE_END  
       or v.PULLED_AT is null  )) PACKER_LENGTH,


       
   (select max(v.ASSEMBLY_ITEM_MD_TOP)  
     from [SPD_ERW].[dbo].[DIM_ASSEMBLY_ITEM] k,
     [SPD_ERW].[dbo].FACT_ASSEMBLY_ITEM_INSTALLATION v
     where v.fk_assembly_item=k.pk_assembly_item
     and v.fk_well=dbo.DIM_WELL.PK_WELL
     and k.ASSEMBLY_ITEM_TYPE = 'PKR'
     and  k.hist = 0 and k.deleted = 0
     and (v.INSTALLED_AT <= dbo.FACT_WORK_ACTIVITY.DATE_END)
     AND (v.PULLED_AT >= dbo.FACT_WORK_ACTIVITY.DATE_END 
        or v.PULLED_AT is null )) PACKER_DEPTH2,

Причем PACKER_LENGTH попадает в результат, а PACKER_DEPTH2 нет!
Даже поля такого нет. И все поля после него отсутствуют.
Какие есть версии?
22 май 15, 13:29    [17676488]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
По логике второе поле, даже если оно вернуло NULL должно попасть в результат.
Но этого не происходит.
Даже просто сделал селект в студии. Там тоже этих полей нет.
22 май 15, 13:33    [17676516]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
Какие есть версии?

узнать уже у сервера колинчество и имена полей данного представления
22 май 15, 13:35    [17676529]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Microsoft SQL Server 2005 - 9.00.5000.00 (X64) Dec 10 2010 10:38:40 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)

-----------
Microsoft SQL Server Management Studio 10.0.1600.22 ((SQL_PreRelease).080709-1414 )
Operating System 6.1.7601
22 май 15, 13:36    [17676541]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
o-o
Guest
а вы не в динамике это создаете?
может, просто не весь запрос на сервер уходит?
тут был товарищ, собирал команду в @sql nvarchar(max), ни одну из составляющих не привел к max,
ему обрезали запрос молча.

короче, в профайлере посмотрите, что на сервер пошло
22 май 15, 13:37    [17676547]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Glory
SQL2008
Какие есть версии?

узнать уже у сервера колинчество и имена полей данного представления

Как такового представления пока нет. Пытаюсь его создать.
Есть текст запроса.
22 май 15, 13:37    [17676550]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
Есть текст запроса.

И где он есть тогда ?
22 май 15, 13:39    [17676568]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
o-o
а вы не в динамике это создаете?

Нет.
22 май 15, 13:41    [17676588]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
o-o
Guest
переставьте местами определения полей,
первым напишите то самое, к-ое НЕ ПОПАДАЕТ во вью.
и посмотрите, попадет ли оно, будучи первым
22 май 15, 13:44    [17676607]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Glory
SQL2008
Есть текст запроса.

И где он есть тогда ?

Есть скрипт, который я выдернул из юниверса SAP BI4.
Он очень большой и сложный, хочу поместить его во VIEW простой или индексированный, для того, чобы его можно было оптимизировать не редактируя сам юниверс (кто работал с ним, тот знает, что это такое).

Но пока мы говорим просто о скрипте, на базе которого пытаемся создать обычное VIEW.
Этот скрипт при выполнении возвращает не все поля, которые он должен был бы вернуть.
Вот в чем загвоздка.
22 май 15, 13:47    [17676636]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
Glory
Member

Откуда:
Сообщений: 104760
SQL2008
Есть скрипт, который я выдернул из юниверса SAP BI4.

И где вы запускаете этот скрипт ?
22 май 15, 13:49    [17676648]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Позор на мои седые волосы!
Это пятничное помутнение рассудка!
Кидайте в меня тухлыми помидорами - поля "которых нет" находятся внутри очередного подзапроса, который я проглядел!
А в конечном селекте этих полей нет.
Вот и все чудеса.

P.S. Немного оправдывает меня лишь тот факт, что текст скрипта генерируется редактором юниверса, поэтому внутри подзапроса перечислены все поля, даже не нужные. Руками так никто бы не написал - зачем нужна выборка полей, которые потом нигде не используются. Вот я и попался.
А написал бы * было бы все ок!
22 май 15, 13:59    [17676704]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Вопрос закрыт.
22 май 15, 14:02    [17676725]     Ответить | Цитировать Сообщить модератору
 Re: Количество полей при создании View  [new]
o-o
Guest
SQL2008
Есть скрипт, который я выдернул из юниверса SAP BI4.

ааа, это же наверное из серии 17296379
называется "багофича fmtonly"
у меня там 2 ссылки на это умничанье BO
22 май 15, 14:03    [17676734]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить