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

Откуда:
Сообщений: 34
Здравствуйте!
Я новичок, поэтому не судите строго)
Есть процедура

CREATE PROCEDURE [dbo].[get_imported_company_name]
-- Add the parameters for the stored procedure here

@terms varchar(50),
@action int,
-- 1 - выбор только названий компаний и городов
-- 2 - выбирает данные по компании из справочника импорта
@dict int = 0 --передается как указатель на таблицу из которой подтягивать ГОРОД, ШТАТ И Т.П. Используется только с параметром @action=2
WITH ENCRYPTION
AS
BEGIN
-- comment: sp_password
if @action = 1
begin

with _table as (

select top(1)
ltrim(rtrim(title))+isnull(' - '+ltrim(rtrim(cities.name)),'') + ' - ' + ltrim(rtrim(country_name)) as title
, company.title as title_clear
, company.company_id
, 1 as is_registered
, 0 as number
, 0 as dict
from
company
left join cities on cities.name = company.city
left join clients on clients.client_id = company.owner_client_id
left join countrys on countrys.country_id = company.country_id
where
UPPER(title) like UPPER('%'+@terms+'%') and clients.client_type <> 5

union
SELECT distinct top(10)
imported_operator_canada.FULL_NAME+' - '+ltrim(rtrim(imported_operator_canada.CITY)) + ' - Canada' as title
, imported_operator_canada.FULL_NAME as title_clear
, null as company_id
, 0 as is_registered
, ROW_NUMBER() over (order by FULL_NAME) as number
, 1 as dict
from
imported_operator_canada
where upper(FULL_NAME) like upper('%'+@terms+'%')

union

select distinct top(10)
ltrim(rtrim([imported_fleet_usa_MASTER].NAME))+' - '+ltrim(rtrim([imported_fleet_usa_MASTER].CITY))+ ' - United States' as title
,ltrim(rtrim([imported_fleet_usa_MASTER].NAME))
,null as company_id
,0 as is_registered
,ROW_NUMBER() over (order by ltrim(rtrim([imported_fleet_usa_MASTER].NAME))) as number
, 2 as dict
from
[imported_fleet_usa_MASTER]
where
ltrim(rtrim([imported_fleet_usa_MASTER].NAME)) like upper('%'+@terms+'%')
)

select *

from
_table
where number in (select MIN(number) from _table as t1 where _table.title = t1.title)

если её запустить к примеру
get_imported_company_name 'lon',1
Она возвращает каждый раз, разное количество строк: 1,16,20,21 и так далее
вопрос: почему? и как сделать что бы возвращало одинаковое количество?
7 май 12, 12:26    [12519516]     Ответить | Цитировать Сообщить модератору
 Re: Процедура возвращает разные данные, при одинаковом запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nelly_lucky
вопрос: почему?

Потому что ваши top-ы в запросах возвращают какждый раз записи.
Они же без order by
7 май 12, 12:28    [12519530]     Ответить | Цитировать Сообщить модератору
 Re: Процедура возвращает разные данные, при одинаковом запросе  [new]
Nelly_lucky
Member

Откуда:
Сообщений: 34
спасибо большое
7 май 12, 13:02    [12519733]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить