Привет!
У меня такая ситуация: Есть процедура p311_kich_LoadFilteredMsgs, в которой идет выполнение sql через sp_executesql, далее после выполнения sp_executesql ниже следует инструкция exec [dbo].[p311_kich_LoadMsgs], в которой используется временная таблица, созданная в sp_executesql.
В ответ на запрос выдается следующая ошибка:
| Код | [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name '#tmp_p311_LoadMsgs'.
|
Но, когда я помещаю выполнение exec [dbo].[p311_kich_LoadMsgs] в sp_executesql, то все работает!!? Странно, потому что при выполнени запроса я использую одно соединение и временная таблица должна быть видна!
хотелось бы узнать в чем дело?
выдает ошибку
| Код | set @sql3 = 'select top 500 m.ID into #tmp_p311_LoadMsgs' + 'from tla_MessOpenCloseAcc m (nolock)' + 'join top_Chains c (nolock) on c.ID = m.IDChain' + 'join #tmp_p311_LoadFilteredMsgs t on t.State = isnull(m.FSSState, 0)' + 'where ' + '(@dBegin is null or case @WhichDate when 0 then m.DateOper when 1 then c.Date end >= @dBegin) and' + '(@dEnd is null or case @WhichDate when 0 then m.DateOper when 1 then c.Date end <= @dEnd ) and' + 'm.IDAccount = isnull(@IDAccount, m.IDAccount) and' + 'm.IDClient = isnull(@IDClient, m.IDClient) --exec [dbo].[p311_kich_LoadMsgs]'
if @stateType = 0 begin EXEC sp_executesql @sql0, N'@WhichDate tinyint , @dBegin smalldatetime, @dEnd smalldatetime, @IDAccount T_CBIdent, @IDClient ClientID', @WhichDate= @WhichDate, @dBegin = @dBegin, @dEnd=@dEnd, @IDAccount=@IDAccount, @IDClient=@IDClient
exec [dbo].[p311_kich_LoadMsgs] end
|
а так все ок!
| Код | set @sql3 = 'select top 500 m.ID into #tmp_p311_LoadMsgs' + 'from tla_MessOpenCloseAcc m (nolock)' + 'join top_Chains c (nolock) on c.ID = m.IDChain' + 'join #tmp_p311_LoadFilteredMsgs t on t.State = isnull(m.FSSState, 0)' + 'where ' + '(@dBegin is null or case @WhichDate when 0 then m.DateOper when 1 then c.Date end >= @dBegin) and' + '(@dEnd is null or case @WhichDate when 0 then m.DateOper when 1 then c.Date end <= @dEnd ) and' + 'm.IDAccount = isnull(@IDAccount, m.IDAccount) and' + 'm.IDClient = isnull(@IDClient, m.IDClient) exec [dbo].[p311_kich_LoadMsgs]'
if @stateType = 0 begin EXEC sp_executesql @sql0, N'@WhichDate tinyint , @dBegin smalldatetime, @dEnd smalldatetime, @IDAccount T_CBIdent, @IDClient ClientID', @WhichDate= @WhichDate, @dBegin = @dBegin, @dEnd=@dEnd, @IDAccount=@IDAccount, @IDClient=@IDClient
--exec [dbo].[p311_kich_LoadMsgs] end
|
ps: sql server 2000 |