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

Откуда:
Сообщений: 6
Помогите пожалуйста разобраться почему хранимая процедура иногда возвращает данные а иногда просто пустую таблицу. Причем если открыть новое окно запросов в студии то оно может вернуть как данные так и пустую таблицу. Два рядом открытых окна могут возвращать разные результаты. Я понимаю что звучит фантастично, но так оно и есть.

Это строка которой вызывается хранимая процедура и которая возвращает непредсказуемые результаты:

exec [dbo].[TC_Report] @startdate=NULL,@enddate=NULL,@currency=0, @affiliateid=N'220020',@campaignid=NULL

Может ли как-то репликация влиять на результат? Еще раз скажу что однажды вернув пустую таблицу, можно нажимать "Run query" еще и еще, всегда будут пустые значение. В это время в другом окне эта же процедура всегда возвращает данные.

Я не DBA, поэтому может плохо обьяснил что к чему, но если кто-то что-то знает или подозревает в чем проблема, пожалуйста напишите. Это MSSQL 2008

Заранее благодарен
2 окт 12, 21:02    [13258355]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
step_ks
Member

Откуда:
Сообщений: 936
Смотрите текст процедуры.
2 окт 12, 21:04    [13258360]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
Sergei1980
Member

Откуда:
Сообщений: 6
В процедуре ничего особенного не видно:
1. Создается временная таблица(если уже есть то удаляется)
2. Во временную таблицу делается запрос из других таблиц
3. После последнего SELECT удаляется временная таблица
2 окт 12, 21:09    [13258374]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
invm
Member

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

Вы может продолжать держать в тайне текст процедуры и гадать на кофейной гуще почему она не работает.
2 окт 12, 21:18    [13258393]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
qwerty112
Guest
Sergei1980
В процедуре ничего особенного не видно:
1. Создается временная таблица(если уже есть то удаляется)
2. Во временную таблицу делается запрос из других таблиц
3. После последнего SELECT удаляется временная таблица

воо, теплее..
а покажи, что для тебя "временная таблица" ?
тот кусок процедуры, где она удаляется/создаётся
2 окт 12, 21:19    [13258400]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
Sergei1980
Member

Откуда:
Сообщений: 6
ALTER proc [dbo].[TC_Affiliate_Deposit_Report]


(
@startdate date = null,
@enddate date = null,
@currency int = null,
@affiliateid varchar (40) = null,
@campaignid int = null
)

as
begin

set nocount on
set arithabort on



If OBJECT_ID ('TC_Affiliate_Deposit_Report_temp') is not null
begin
drop table TC_Affiliate_Deposit_Report_temp
end

select

vbt.Affiliate_ID 'Affiliate_ID',
rtrim(vbt.Campaign_id) 'Campaign_ID',
vbt.Unique_Click_ID,
dep.[Date] [Deposit_Date],
dep.Player_ID 'Player_ID',
pdv.first_name,
pdv.last_name,
pdv.email,


--rtrim(sum(dep.num_users_depositing)) as 'Number_Depositing',
sum(dep.sum_X_Converted_purchases) as 'Sum_Deposits_X'

into TC_Affiliate_Deposit_Report_temp

from
vw_tc_bannertag_conversions vbt


right join
(
select
pr.PlayerId as 'Player_ID',
convert(date,pr.datetime) as 'Date',
--month(pr.datetime) as 'month',
--year(pr.datetime) as 'year',
CONVERT(decimal(10,2),(sum(pr.amount * ex.ExchangeRate))) as 'Sum_X_Converted_Purchases'
--COUNT(distinct(pr.PlayerId)) as 'num_users_depositing'
FROM vw_Casper_fPurchase pr (nolock)
JOIN vw_Casper_fCurrency cur (NOLOCK)
ON cur.CurrencyId = isnull(@currency,0)
JOIN vw_Casper_fExchangeRateDetails ex (NOLOCK) -- axchange rate details for calculation
ON ex.ExMasterId = pr.exMasterID
join vw_casper_fcurrency cur2
on pr.currencyid = cur2.currencyid
AND ex.ToCurrencyId = isnull(@currency,0)
AND pr.GamingServerId = ex.GamingServerId

where pr.datetime >= ISNULL(@startdate, '1900-01-01')
and pr.datetime <= ISNULL(@enddate, current_timestamp)
AND pr.PurchaseStatusId = 1


group by pr.playerid, convert(date,pr.datetime)
)
as dep

on dep.Player_ID = vbt.userid


left join
TC_vw_Player_Details_View pdv
on pdv.player_id=dep.Player_ID

where vbt.affiliate_id = ISNULL(@affiliateid, vbt.affiliate_id)
and vbt.campaign_id = isnull(@campaignid, vbt.campaign_id)

group by

--vbt.Affiliate_ID, dep.Player_ID, dep.[date]

vbt.Affiliate_ID,
vbt.Campaign_id,
vbt.Unique_Click_ID,
dep.Player_ID,
pdv.first_name,
pdv.last_name,
pdv.email,
dep.[Date]



select * from TC_Affiliate_Deposit_Report_temp
order by Deposit_Date asc

--SELECT @@rowcount AS 'Rows_Returned'

select
--SUM(cast(cdp.Number_Depositing as int)) Number_Depositing,
SUM(cdp.Sum_Deposits_X) Sum_Deposits_X
from TC_Affiliate_Deposit_Report_temp cdp


drop table TC_Affiliate_Deposit_Report_temp


end
2 окт 12, 21:24    [13258413]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
qwerty112
Guest
+
Sergei1980
ALTER proc [dbo].[TC_Affiliate_Deposit_Report]     
        
          
(                  
@startdate date = null,          
@enddate date = null,          
@currency int = null,          
@affiliateid varchar (40) = null,    
@campaignid int = null        
)                 
                  
as                  
begin                  
                  
 set nocount on                  
 set arithabort on    
    
  
    
If OBJECT_ID ('TC_Affiliate_Deposit_Report_temp') is not null    
begin    
drop table TC_Affiliate_Deposit_Report_temp    
end    
    
select          
          
vbt.Affiliate_ID 'Affiliate_ID',  
rtrim(vbt.Campaign_id) 'Campaign_ID',          
vbt.Unique_Click_ID,      
dep.[Date] [Deposit_Date],     
dep.Player_ID 'Player_ID',   
pdv.first_name,  
pdv.last_name,       
pdv.email,  
          
         
--rtrim(sum(dep.num_users_depositing)) as 'Number_Depositing',          
sum(dep.sum_X_Converted_purchases) as 'Sum_Deposits_X'     
  
into TC_Affiliate_Deposit_Report_temp    
    
from          
vw_tc_bannertag_conversions vbt    
  
    
right join    
(    
select          
pr.PlayerId as 'Player_ID',          
convert(date,pr.datetime) as 'Date',    
--month(pr.datetime) as 'month',          
--year(pr.datetime) as 'year',       
CONVERT(decimal(10,2),(sum(pr.amount * ex.ExchangeRate))) as 'Sum_X_Converted_Purchases'    
--COUNT(distinct(pr.PlayerId)) as 'num_users_depositing'          
FROM vw_Casper_fPurchase pr (nolock)          
JOIN vw_Casper_fCurrency cur  (NOLOCK)          
ON cur.CurrencyId = isnull(@currency,0) 
JOIN vw_Casper_fExchangeRateDetails ex  (NOLOCK) -- axchange rate details for calculation          
ON ex.ExMasterId = pr.exMasterID          
join vw_casper_fcurrency cur2          
on pr.currencyid = cur2.currencyid          
AND ex.ToCurrencyId = isnull(@currency,0)          
AND pr.GamingServerId = ex.GamingServerId          
          
where pr.datetime >= ISNULL(@startdate, '1900-01-01')        
and pr.datetime <= ISNULL(@enddate, current_timestamp)         
AND pr.PurchaseStatusId = 1 
           
          
group by pr.playerid, convert(date,pr.datetime)      
)    
as dep    
    
on dep.Player_ID = vbt.userid          
       
  
left join  
TC_vw_Player_Details_View pdv  
on pdv.player_id=dep.Player_ID  
  
where vbt.affiliate_id = ISNULL(@affiliateid, vbt.affiliate_id)  
and vbt.campaign_id = isnull(@campaignid, vbt.campaign_id) 
  
group by       
        
--vbt.Affiliate_ID, dep.Player_ID, dep.[date]    
  
vbt.Affiliate_ID,  
vbt.Campaign_id,          
vbt.Unique_Click_ID,  
dep.Player_ID,   
pdv.first_name,  
pdv.last_name,       
pdv.email,      
dep.[Date]    
  
   
    
select * from TC_Affiliate_Deposit_Report_temp     
order by Deposit_Date asc    
    
--SELECT @@rowcount AS 'Rows_Returned'     
    
select     
--SUM(cast(cdp.Number_Depositing as int)) Number_Depositing,    
SUM(cdp.Sum_Deposits_X) Sum_Deposits_X    
from TC_Affiliate_Deposit_Report_temp cdp    
    
    
drop table TC_Affiliate_Deposit_Report_temp     
      
        
end


автор
If OBJECT_ID ('TC_Affiliate_Deposit_Report_temp') is not null    
begin    
drop table TC_Affiliate_Deposit_Report_temp    
end  

эта таблица ВРЕМЕННАЯ только в твоих фантазиях,
это самая обычная таблица

все drop table - убирай, а имя для таблицы задай такое
#TC_Affiliate_Deposit_Report_temp
2 окт 12, 21:34    [13258440]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
Sergei1980
Я не DBA, поэтому может плохо обьяснил что к чему, но если кто-то что-то знает или подозревает в чем проблема, пожалуйста напишите. Это MSSQL 2008
Какой то "гений" использует вместо временной таблицы постоянную. Конечно, при вызове нескольких процедур в разных окнах они возвращают непонятно что. Особенно если процедура долго работает.

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

Да, ещё пишите текст процедур в теге SRC, а то читать невозможно...
2 окт 12, 21:37    [13258447]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
Sergei1980
Member

Откуда:
Сообщений: 6
Спасибо за ответы. Я получил эти процедуры от того кто называет себя DBA. И уже намучился с ними. Я напишу этому DBA про его временные таблицы. Еще рас большое спасибо.
2 окт 12, 22:04    [13258561]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
Sergei1980
Member

Откуда:
Сообщений: 6
ALTER proc [dbo].[TC_Affiliate_Deposit_Report]     
    
        
          
(                  
@startdate date = null,          
@enddate date = null,          
@currency int = null,          
@affiliateid varchar (40) = null,    
@campaignid int = null        
)                 
                  
as                  
begin                  
                  
 set nocount on                  
 set arithabort on    

    
    
--If OBJECT_ID ('TC_Affiliate_Deposit_Report_temp') is not null    
--begin    
--drop table TC_Affiliate_Deposit_Report_temp    
--end    
    
select          
          
vbt.Affiliate_ID 'Affiliate_ID',  
rtrim(vbt.Campaign_id) 'Campaign_ID',          
vbt.Unique_Click_ID,      
dep.[Date] [Deposit_Date],     
dep.Player_ID 'Player_ID',   
pdv.first_name,  
pdv.last_name,       
pdv.email,  
          
         
--rtrim(sum(dep.num_users_depositing)) as 'Number_Depositing',          
sum(dep.sum_X_Converted_purchases) as 'Sum_Deposits_X'     
  
into #TC_Affiliate_Deposit_Report_temp    
    
from          
vw_tc_bannertag_conversions vbt    
  
    
right join    
(    
select          
pr.PlayerId as 'Player_ID',          
convert(date,pr.datetime) as 'Date',    
--month(pr.datetime) as 'month',          
--year(pr.datetime) as 'year',       
CONVERT(decimal(10,2),(sum(pr.amount * ex.ExchangeRate))) as 'Sum_X_Converted_Purchases'    
--COUNT(distinct(pr.PlayerId)) as 'num_users_depositing'          
FROM vw_Casper_fPurchase pr (nolock)          
JOIN vw_Casper_fCurrency cur  (NOLOCK)          
ON cur.CurrencyId = isnull(@currency,0) 
JOIN vw_Casper_fExchangeRateDetails ex  (NOLOCK) -- axchange rate details for calculation          
ON ex.ExMasterId = pr.exMasterID          
join vw_casper_fcurrency cur2          
on pr.currencyid = cur2.currencyid          
AND ex.ToCurrencyId = isnull(@currency,0)          
AND pr.GamingServerId = ex.GamingServerId          
          
where pr.datetime >= ISNULL(@startdate, '1900-01-01')        
and pr.datetime <= ISNULL(@enddate, current_timestamp)         
AND pr.PurchaseStatusId = 1 
           
          
group by pr.playerid, convert(date,pr.datetime)      
)    
as dep    
    
on dep.Player_ID = vbt.userid          
       
  
left join  
TC_vw_Player_Details_View pdv  
on pdv.player_id=dep.Player_ID  
  
where vbt.affiliate_id = ISNULL(@affiliateid, vbt.affiliate_id)  
and vbt.campaign_id = isnull(@campaignid, vbt.campaign_id) 
  
group by       
        
--vbt.Affiliate_ID, dep.Player_ID, dep.[date]    
  
vbt.Affiliate_ID,  
vbt.Campaign_id,          
vbt.Unique_Click_ID,  
dep.Player_ID,   
pdv.first_name,  
pdv.last_name,       
pdv.email,      
dep.[Date]    
  
   
    
select * from #TC_Affiliate_Deposit_Report_temp     
order by Deposit_Date asc    
    
--SELECT @@rowcount AS 'Rows_Returned'     
    
select     
--SUM(cast(cdp.Number_Depositing as int)) Number_Depositing,    
SUM(cdp.Sum_Deposits_X) Sum_Deposits_X    
from #TC_Affiliate_Deposit_Report_temp cdp    
    
    
--drop table TC_Affiliate_Deposit_Report_temp     
      
        
end 


Я поменял имя таблицы добавив # и забрав DROP. Но это не помогло, все те же результаты. В одном окне данные, в другом пустая таблица. Я закрыл окна перед тем как тестировать снова.
2 окт 12, 22:23    [13258637]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
step_ks
Member

Откуда:
Сообщений: 936
У вас там вьюхи в запросе используются, судя по названиям? Их текст тоже показывайте.
Ну и убедитесь, что вы точно вызываете именно ту процедуру, которою поменяли, а то бывает.
2 окт 12, 22:55    [13258755]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
qwerty112
Guest
Sergei1980
Я поменял имя таблицы добавив # и забрав DROP. Но это не помогло, все те же результаты. В одном окне данные, в другом пустая таблица. Я закрыл окна перед тем как тестировать снова.

вы, когда "поменял имя таблицы добавив # и забрав DROP", после этого скрипт изменения процедуры (вот этот - ALTER proc) - выполнили ?
2 окт 12, 23:03    [13258786]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура возвращает пустую таблицу  [new]
Sergei1980
Member

Откуда:
Сообщений: 6
Я поменял точно процедуру и потом проверил что это она. Сейчас она возвращает данные во всех окнах, но до этого после того как я ее поменял то в одном новом окне была пустая таблица. Может это было кеширование?
2 окт 12, 23:21    [13258875]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить