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

Откуда:
Сообщений: 204
не могу установить индекс на временную таблицу. В чем причина?
CREATE FUNCTION oss.f_view_report(@org int)
RETURNS @rtable TABLE
 ([city] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [street_type] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [street] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [building] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [sector] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [flat_count] int NULL,
  [floor_count] int NULL,
  [entrance] int NULL,
  [diapazon_flat] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [comment_address] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [floor_transit_is] int NULL,
  [floor_prolet_is] int NULL,
  [chassis] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [port] varchar(50) COLLATE Cyrillic_General_CI_AS NULL,
  [flat_number] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [full_name] varchar(100) COLLATE Cyrillic_General_CI_AS NULL,
  [login] varchar(50) COLLATE Cyrillic_General_CI_AS NULL,
  [status_date] date NULL,
  [state] varchar(100) COLLATE Cyrillic_General_CI_AS NULL)
AS
BEGIN
    declare @city_s varchar(100), @street_type_s varchar(100), @street_s varchar(100), @building_s varchar(100), @sector_s varchar(100);
    declare @flat_count_s int, @floor_count_s int, @entrance_s int, @diapazon_flat_s varchar(100), @comment_address_s varchar(100), @floor_transit_is_s int;
    declare @floor_prolet_is_s int, @chassis_s varchar(100), @port_s varchar(50), @flat_number_s varchar(100), @full_name_s varchar(100), @login_s varchar(50),
            @status_date_s date, @state_s varchar(100);


    declare @city varchar(100), @street_type varchar(100), @street varchar(100), @building varchar(100), @sector varchar(100);
    declare @flat_count int, @floor_count int, @entrance int, @diapazon_flat varchar(100), @comment_address varchar(100), @floor_transit_is int;
    declare @floor_prolet_is int, @chassis varchar(100), @port varchar(50), @flat_number varchar(100), @full_name varchar(100), @login varchar(50),
            @status_date date, @state varchar(100);
            
    declare @indx varchar(100);
                
    DECLARE cur CURSOR FOR select city,street_type,street,building,sector, 
    flat_count,floor_count,entrance,diapazon_flat,comment_address,floor_transit_is,
    floor_prolet_is,chassis,port,flat_number,full_name,login,STATUS_DATE,state
    from oss.f_v_client_entrance (@org)  
    order by street_type, street, building, entrance, flat_number;
   
    open cur;
    create index ind on rtable(city);


выдает следующию ошибку при компиляции функции.

К сообщению приложен файл. Размер - 14Kb
12 янв 15, 11:19    [17104790]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
relav
выдает следующию ошибку при компиляции функции.

И что для вас непонятного в сообщении ?
12 янв 15, 11:20    [17104802]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
relav
Member

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

вы лучше скажите в чем проблема.
12 янв 15, 11:24    [17104828]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
relav
Glory,

вы лучше скажите в чем проблема.

Перечитайте сообщение. Вы 7 слов осилить не можете ?
12 янв 15, 11:25    [17104835]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
relav
Member

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

да вы не меня обсуждайте. Это ж форум не обо мне. Если не хотите помочь не нужно.
12 янв 15, 11:26    [17104846]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
relav
да вы не меня обсуждайте. Это ж форум не обо мне. Если не хотите помочь не нужно.

Какое из слов в сообшение об ошибке ва надо объяснить ?
"Недопустимое" ? "В функции" ? ...
12 янв 15, 11:28    [17104858]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
relav
Member

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

мне нужно понять, что мне нужно сделать чтоб создать индекс на временную таблицу и чтоб это сообщение не выдавалось , а создавался индекс.
12 янв 15, 11:29    [17104874]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
relav,

открываете, значит, курсор, - и что дальше?
Зачем эта функция-то нужна?

Вы заметили, что в названии темы - "временная таблица",
а разговор пошёл о "табличной переменной"?
При объявлении табличной переменной можно объявить констрейнты: либо PRIMARY KEY либо UNIQUE.
Вот констрейнт и обеспечит переменную индексом.

Общая рекомендация: забудьте пока о курсорах.
12 янв 15, 11:30    [17104881]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
relav
Glory,

мне нужно понять, что мне нужно сделать чтоб создать индекс на временную таблицу и чтоб это сообщение не выдавалось , а создавался индекс.

А вы в состоянии понять, что у каждой команды может быть еще и область, где ее можно применять ?
Что неясного во фразе "недопустимо использование в функции" ?
Вы думаете, что есть опция "можно/нельзя использовать" ?
12 янв 15, 11:35    [17104915]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
relav
Member

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

т.е. создать индекс с помощью команды create index на табличную переменную - нельзя? создавать нужно через первичный ключ?
12 янв 15, 11:39    [17104936]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
relav
т.е. создать индекс с помощью команды create index на табличную переменную - нельзя?

А вы что ни прочитали об этом в хелпе ?

relav
создавать нужно через первичный ключ?

И об этом тоже не прочитали ?

Ааа. Вы наверное читать не умеете ?
12 янв 15, 11:41    [17104944]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
relav, ошибка говорит о недопустимости использования CREATE INDEX в функции (и т.д.). Что может быть непонятного в сообщении?
12 янв 15, 11:48    [17105017]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Владислав Колосов
relav, ошибка говорит о недопустимости использования CREATE INDEX в функции (и т.д.). Что может быть непонятного в сообщении?
Ещё круче: команды CREATE INDEX для табличной переменной вообще не существует!
Ни в функции, ни где-либо ещё.
12 янв 15, 11:58    [17105102]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
Владислав Колосов
relav, ошибка говорит о недопустимости использования CREATE INDEX в функции (и т.д.). Что может быть непонятного в сообщении?
Ещё круче: команды CREATE INDEX для табличной переменной вообще не существует!
Ни в функции, ни где-либо ещё.

У ТС в его команде указано имя "нормальной" таблицы
12 янв 15, 12:04    [17105142]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Glory
У ТС в его команде указано имя "нормальной" таблицы

да то ТС напутал все с написанием. Ето уже вторая тема с етой ф-цией.
12 янв 15, 12:05    [17105150]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
если я правильно вангую ему надо что то типа этого
declare @table table (city varchar(100),building varchar(100),fullname varchar(100))
insert into @table values('Москва','дом 1','Петров')
,('Москва','дом 1','Иванов')
,('Москва','дом 1','Сидоров')
,('Москва','дом 2','Михайлов')
,('Москва','дом 2','Семенова')
,('Новосибирск','дом 1','Тихонов')
,('Новосибирск','дом 1','Захаров')
,('Новосибирск','дом 3','Круглов')

select
 case when n1 = 1 then  city else'' end as city
,case when n2 = 1 then  building else'' end as building
,fullname
from
(SELECT city,building,fullname
,ROW_NUMBER()OVER(order by city,building,fullname) as n
,ROW_NUMBER()OVER(partition by city order by city,building,fullname) as n1
,ROW_NUMBER()OVER(partition by city,building order by city,building,fullname) as n2
FROM @table)t
order by n
12 янв 15, 12:08    [17105167]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
Maxx
Member [скрыт]

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

сие ему пытались пояснить в первой теме по етой ф-ции. Там изначально было вообще 2 курсора
12 янв 15, 12:11    [17105182]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
ну может с примерчиком до него быстрее дойдет что ему не нужны ни функции ни процедуры ни тем паче курсоры
12 янв 15, 12:18    [17105234]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
zasandator
Member [скрыт] [заблокирован]

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

Во временных таблицах типа #tbl индексы строятся прекрасно. В Вашем примере вы наверное хотите сделать индекс на табличную переменную @rtable?
RETURNS @rtable TABLE
. Если так то ниже где пытаетесь создать индекс - скорее всего отсутствует таблица rtable -
create index ind on rtable(city);
.

Собственно из за непонимания что Вы хотите услышать и что в конечном итоге сделать народ так и отвечает...
12 янв 15, 21:19    [17107985]     Ответить | Цитировать Сообщить модератору
 Re: индекс на временную таблицу  [new]
o-o
Guest
zasandator,
да народ уже давно все понял и даже написал решение, набив за некоторых тестовые данные,
но для желающих еще поотвечать: пишите уж что-то новенькое, а вот что уже отвечено:
1. то, что хочет сделать ТС, решается вот так 17105167 без курсоров
2. то, что объявляется как declare @t table, не есть временная таблица, это табличная переменная, и для нее 17104881
3. создание в функции индекса хоть на временную, хоть на постоянную таблицу, приведет к неизбежному 17104790
12 янв 15, 21:33    [17108033]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить