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

Откуда: Москва
Сообщений: 28
Ситуация заключается в следующем есть необходимость выполнения динамического SQL запроса с последующей обработкой результата.
Запрос формируется в процедуре, которая на выходе выполняет его и возвращает набор данных. Этот набор пытаюсь вставить в временную таблицу.

Основная процедура следующая -

PROCEDURE dbo.[Дебиторка. Расчет ПДЗ Автомобили v.29/07/09]
(@FirmName nvarchar(50)='', @Firm nvarchar(50), 
 @datee datetime, @froup int=0, @CustomerNo nvarchar(20)='', 
 @Debug int=0)
AS	
	SET NOCOUNT ON
	declare @PrefixAuto nvarchar(100)
	declare @PrefixPart nvarchar(100)
	set @PrefixPart=case when @FirmName<>'' then @FirmName+'..[' else '[' end+@Firm
	DECLARE @SumDZ_SQL NVARCHAR(4000)
	DECLARE @Having_SQL NVARCHAR(4000)
	DECLARE @SQL NVARCHAR(4000) 
	set @SumDZ_SQL='(select sum([Quantity])*1.18*sum(case when [Total Price]<>0 then [Total Price] else ([Vehicle Portion]+[Manuf_ Option Portion]+[Own Option Portion]) end) 
				from '+@PrefixPart+'$Vehicle Ledger Entry] 
				where vin=v.vin and [Entry Type]=1 and [Posting Date]<'''+convert(nvarchar(50),@datee)+''' ' 
					+case  when @froup in (2) then 'and [Due Date]<'''+convert(nvarchar(50),@datee)+'''' else '' end +')'
	/*Сделаем обработку условия на отбор данных, чтобы переплаты и авансы попадали только в детализацию отчетов*/
	set @Having_SQL=case when @froup in (3,4) then 'abs' else '' end+'(round('+@SumDZ_SQL+'+IsNull(Sum(op.SumOP),0),2))>0.01'

	/*Подготавливаем временную таблицу для сбора данных по оплатам*/
	print 'Создание или очистка временной таблицы #TmpTblPayments'
	IF OBJECT_ID(N'tempdb..#TmpTblPayments','U') IS NULL
	begin
		CREATE TABLE #TmpTblPayments
			([Customer No_] nvarchar(20), 
			Agreement nvarchar(20), 
			VIN nvarchar(20),  
			SumOP decimal(18,2), 
			Last_Pay_Date datetime)
		CREATE NONCLUSTERED INDEX [IX_#TmpTblPayments] ON #TmpTblPayments 
		([VIN] ASC
		) ON [PRIMARY]		
	end	
	else
		TRUNCATE TABLE #TmpTblPayments	
	
	set @SQL ='insert into #TmpTblPayments
	Select cle.[Customer No_], a.Code Agreement, cle.VIN,  Sum(cle.Amount) as SumOP , Last_Pay_Date=Max(cle.[Posting Date])
	from '+@PrefixPart+'$Customer Ledger Entry] cle 
		inner join '+@PrefixPart+'$Agreement] a on a.Blocked=0 and a.Area=1 and a.[Source No_] =cle.[Customer No_] and a.Code=cle.[Agreement No_] 
	where cle.[Document Type]<=1 and cle.[Main Area]=2  and cle.[Posting Date]<='''+convert(nvarchar(50),@datee)+'''  
	group by cle.[Customer No_], a.Code, cle.VIN'
	
	if @Debug=1 
	begin
		print 'Вложенный запрос для формирования временной таблицы #TmpTblPayments'
		print Len(@SQL)		
		print substring(@SQL,1,4000)
	end
	else
		EXEC [dbo].[sp_executesql] @SQL
			
	set @SQL =''
	
	/*Подготавливаем временную таблицу для сбора данных по счетам*/
	print 'Создание или очистка временной таблицы #TmpTblInvoices'
	IF OBJECT_ID(N'tempdb..#TmpTblInvoices','U') IS NULL
	begin
		CREATE TABLE #TmpTblInvoices
			([InvNo] nvarchar(20), 
			InvDate datetime, 
			vin nvarchar(20), 
			[Agreement No_] nvarchar(20),
			Description nvarchar(200), 
			Blocked int)
		CREATE NONCLUSTERED INDEX [IX_#TmpTblInvoices] ON #TmpTblInvoices 
		([VIN] ASC
		) ON [PRIMARY]
	end
	else
		TRUNCATE TABLE #TmpTblInvoices
	
	set @SQL ='insert into #TmpTblInvoices	
			select [InvNo]=sihh.[No_], InvDate=sihh.[Posting date], sill.vin, sihh.[Agreement No_],agr.Description, agr.Blocked	
						from '+@PrefixPart+'$Sales Invoice Line] sill 
							inner join '+@PrefixPart+'$Sales Invoice Header] sihh on sihh.No_=sill.[Document No_] 
							and not exists( SELECT NULL FROM '+@PrefixPart+'$Sales credit memo header] scmh 
											inner join '+@PrefixPart+'$Sales credit memo line] scml on scml.[Document No_]=scmh.No_ and scml.vin=sill.vin 
											WHERE scmh.[applies-to invoice no_] = sihh.no_) 
						inner join '+@PrefixPart+'$Agreement] agr on agr.Code=sihh.[Agreement No_] and agr.Blocked=0'
	
	if @Debug=1 
	begin
		print 'Вложенный запрос для формирования временной таблицы #TmpTblInvoices'
		print Len(@SQL)		
		print substring(@SQL,1,4000)
	end
	else
		EXEC [dbo].[sp_executesql] @SQL

	set @SQL =''
	
	SET @SQL =@SQL+' select '+case when @froup<>5 then '@@spid SPID, '''+@Firm+''' Firm,' else '' end +'[Customer No_]'
				+case @froup 
				when 0 then ', Area, [OAO Agreement]'
				when 1 then ', [Posting Date], [Due Date], [Make Code], [Model No_], VIN, [Option Code], Area, [OAO Agreement]'
				when 2 then ', [Posting Date], [Due Date], [Make Code], [Model No_], VIN, [Option Code], Area, [OAO Agreement]'
				when 3 then ', [Posting Date], [Due Date], [Leaving Date], [Make Code], [Model No_], VIN, [Option Code], [Purch_ Order Type], Area, [OAO Agreement], InvNo, InvDate, SumDZ'
				when 4 then ', [Posting Date], [Due Date], [Leaving Date], [Make Code], [Model No_], VIN, [Option Code], [Purch_ Order Type], Area, [OAO Agreement], InvNo, InvDate, SumDZ'
				when 5 then ', [Due Date], VIN, [Posting Date] '
				when 6 then ', [Posting Date], [Due Date], [Leaving Date],[Agreement No_], [Make Code], [Model No_], VIN, [Option Code], [Purch_ Order Type], Area, [OAO Agreement], InvNo, InvDate, SumDZ, Last_Pay_Date, Pay'
			 end+', PDZ=sum(SumDZ+pay)'+case when @froup<>5 then ', PENI=0 ' else '' end +'
		from 
		(Select a.[Source No_][Customer No_],v.[Posting Date], v.[Agreement No_],v.[Make Code], v.[Model No_], v.vin, o.[Option Code], veh.[Purch_ Order Type], v.[Due Date], veh.[Leaving Date], a.Area, a.[OAO Agreement], 
			SumDZ='+@SumDZ_SQL+', pay=IsNull(Sum(op.SumOP),0), op.Last_Pay_Date, inv.InvNo, inv.InvDate 
		from '+@PrefixPart+'$Vehicle Ledger Entry] as v 
			inner join '+@PrefixPart+'$Vehicle] as veh on veh.vin=v.vin
			inner join '+@PrefixPart+'$Agreement] a on a.Code=v.[Agreement No_] and a.Blocked=0 '+case when @CustomerNo<>'' then 'and a.[Source No_]='''+@CustomerNo+''' ' else ' ' end +
			'left outer join '+@PrefixPart+'$Vehicle Option] as o on o.VIN = v.VIN and o.[Option Type]=1
			LEFT OUTER JOIN  #TmpTblPayments as op on op.VIN=v.VIN and op.[Customer No_]=a.[Source No_] and op.[Agreement]=v.[Agreement No_] 
			left outer join #TmpTblInvoices inv on inv.vin=v.vin 
		where v.[Entry Type]=1 and v.[Posting Date]<'''+convert(nvarchar(50),@datee)+''' ' 
			+case  when @froup in (0,2,4) then 'and v.[Due Date]<'''+convert(nvarchar(50),@datee)+''' ' else ' ' end 
			+'and not exists(select null from '+@PrefixPart+'$Vehicle Ledger Entry] 
					where [VIN]=v.vin and [Entry No_]>v.[Entry No_] and [Posting Date]<='''+convert(nvarchar(50),@datee)+''' and [Entry Type]=1 ) 
			and (v.[Posting date]>=''2009-04-01 00:00:00.000'' or exists(select sill.[Posting date], sill.vin, sihh.[Agreement No_],agr.Description, agr.Blocked 
						from '+@PrefixPart+'$Sales Invoice Line] sill 
							inner join '+@PrefixPart+'$Sales Invoice Header] sihh on sihh.No_=sill.[Document No_] 
							and not exists( SELECT NULL FROM '+@PrefixPart+'$Sales credit memo header] scmh 
											inner join '+@PrefixPart+'$Sales credit memo line] scml on scml.[Document No_]=scmh.No_ and scml.vin=sill.vin 
											WHERE scmh.[applies-to invoice no_] = sihh.no_ and scmh.[Posting Date]<'''+convert(nvarchar(50),@datee)+''') 
						inner join '+@PrefixPart+'$Agreement] agr on agr.Code=sihh.[Agreement No_] and agr.Blocked=0 where sill.vin=v.vin)) 
		group by a.[Source No_], v.[Posting Date], v.[Agreement No_], v.[Make Code], v.[Model No_], v.vin, o.[Option Code], veh.[Purch_ Order Type], v.[Due Date], veh.[Leaving Date], a.Area, a.[OAO Agreement], op.Last_Pay_Date, inv.InvNo, inv.InvDate 
		having '+@Having_SQL+') d 
		group by [Customer No_]'
			+case @froup 
				when 0 then ', Area, [OAO Agreement]'
				when 1 then ', [Posting Date], [Make Code], [Model No_], vin, [Option Code], [Due Date], Area, [OAO Agreement] '
				when 2 then ', [Posting Date], [Make Code], [Model No_], vin, [Option Code], [Due Date], Area, [OAO Agreement] '
				when 3 then ', [Posting Date], [Due Date], [Leaving Date], [Make Code], [Model No_], VIN, [Option Code], [Purch_ Order Type], Area, [OAO Agreement], InvNo, InvDate, SumDZ'
				when 4 then ', [Posting Date], [Due Date], [Leaving Date], [Make Code], [Model No_], VIN, [Option Code], [Purch_ Order Type], Area, [OAO Agreement], InvNo, InvDate, SumDZ'
				when 5 then ', [Due Date], VIN, [Posting Date] '
				when 6 then ', [Posting Date], [Due Date], [Leaving Date],[Agreement No_], [Make Code], [Model No_], VIN, [Option Code], [Purch_ Order Type], Area, [OAO Agreement], InvNo, InvDate, SumDZ, Last_Pay_Date, Pay'
			 end		

	if @Debug=1 
	begin
		print Len(@SQL)		
		print substring(@SQL,1,4000)
		print substring(@SQL,4001,4000)
	end
	else
		EXEC [dbo].[sp_executesql] @SQL 
	
	print 'Удаление временной таблицы #TmpTblPayments'
	drop TABLE #TmpTblPayments
	print 'Удаление временной таблицы #TmpTblInvoices'
	drop TABLE #TmpTblInvoices
	RETURN

Далее ее использую в следующем блоке:

declare @FirmName nvarchar(50)
set @FirmName='Имя БД'
declare @Firm nvarchar(50)
set @Firm='Фирма'

/*Формируем данные по ДЗ на нужную дату	*/
declare @dz_date datetime
set @dz_date='2009-06-30'

declare @froup int
set @froup=6 /*Устанавливаем уровень группировки для динамических запросов в хранимых процедурах*/

/*Подготавливаем временную таблицу для сбора данных по ДЗ и ПДЗ*/
IF OBJECT_ID(N'tempdb..#TmpTblDebitorkaVehicle','U') IS NULL
	CREATE TABLE #TmpTblDebitorkaVehicle
		(SPID int, Firm nvarchar(50),[Customer No_] nvarchar(50), 
		[Posting Date] datetime, [Due Date] datetime, [Leaving Date] datetime, 
		[Agreement No] nvarchar(50),[Make Code] nvarchar(50), [Model No_] nvarchar(50), VIN nvarchar(50), [Option Code] nvarchar(50), 
		[Purch_ Order Type] nvarchar(50), Area int, [OAO Agreement] int, 
		InvNo nvarchar(20), InvDate datetime, 
		SumDZ decimal(18,4), 
		Last_Pay_Date datetime, Pay decimal(18,4), PDZ decimal(18,4), PENI decimal(18,4))
else
	TRUNCATE TABLE #TmpTblDebitorkaVehicle

insert into #TmpTblDebitorkaVehicle
	exec  Reporting_Service..[Дебиторка. Расчет ПДЗ Автомобили v.29/07/09] @FirmName,@Firm,@dz_date,@froup

Так вот суть вопроса: сама процедура выполняется и возвращает данные в среднем за 10 сек сам набор данных чуть больше 2000 строк. Процедура выполняется на сервере 2000 и 2005. На 2005 нет никаких проблем и задержек, но на 2000 запрос вешается на вставке в временную таблицу. Может кто сталкивался с данной проблемой и может подсказать или направить, заранее спасибо!
30 июл 09, 11:12    [7477611]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
А что такое "вешается на вставке в временную таблицу" в вашем понимании ?
Как и чем вы отследили, что происходит с коннектом в этот момент ?
30 июл 09, 11:14    [7477630]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
круто. а теперь все тоже самое, но без динамического SQL.

для спящего время бодрствования равносильно сну
30 июл 09, 11:14    [7477631]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

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

Вешается это то что от 5 до 10 мин он так и не заканчивается, при этом сама временная таблица остается пустой. Сообщения об ошибках или таймауту тоже не пишется. Если есть какой-то "SQL монитор" чтобы реальные действия сервера поссмотреть, подскажите я проверю. Просто с точки зрения контроля за сервером я не асс и с MS SQL не так давно "дружу"...
30 июл 09, 11:18    [7477683]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

Откуда: Москва
Сообщений: 28
Алексей2003,

К сожалению без динамичного мне не подойдет, так как разных БД много и сервер не один. Соответственно и поддержка тогда будет очень не удобной.
30 июл 09, 11:23    [7477722]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2fdt
а, т.е. вы предлагаете, чтобы мы сами тут сэмулировали все таблицы, и получили прогонный скрипт, который не завершится с ошибкой?

для спящего время бодрствования равносильно сну
30 июл 09, 11:25    [7477742]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а средство есть. SQL Profiler

для спящего время бодрствования равносильно сну
30 июл 09, 11:26    [7477746]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

Откуда: Москва
Сообщений: 28
Алексей2003
2fdt
а, т.е. вы предлагаете, чтобы мы сами тут сэмулировали все таблицы, и получили прогонный скрипт, который не завершится с ошибкой?

для спящего время бодрствования равносильно сну


Ааа, в этом смысле, я не так понял... попробую сейчас собрать
30 июл 09, 11:27    [7477762]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

Откуда: Москва
Сообщений: 28
Алексей2003
а средство есть. SQL Profiler

для спящего время бодрствования равносильно сну


Нет есть только стандартная установка MS SQL и что в нее входит.
30 июл 09, 11:29    [7477782]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
fdt
Алексей2003
а средство есть. SQL Profiler

для спящего время бодрствования равносильно сну


Нет есть только стандартная установка MS SQL и что в нее входит.

SQL Profiler входит в стандартную установку. Если только у вас не редакция MSDE/Express
30 июл 09, 11:32    [7477819]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

Откуда: Москва
Сообщений: 28
fdt
Алексей2003
2fdt
а, т.е. вы предлагаете, чтобы мы сами тут сэмулировали все таблицы, и получили прогонный скрипт, который не завершится с ошибкой?

для спящего время бодрствования равносильно сну


Ааа, в этом смысле, я не так понял... попробую сейчас собрать


Я тут поймал себя на мысли что сгенерить без динамического запроса просто, но без всех таблиц и данных в нем что это даст? Выполнить то его все равно не получиться, или я туплю? Вы имели в виду только скрипт по теме или все же все таблицы, чтобы его можно было выполнить?
30 июл 09, 11:33    [7477827]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кроме того, никто не мешает вам помониторить состояние коннекта из ЕМ/SMS или через запрос к системным таблицам
30 июл 09, 11:34    [7477834]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
fdt
fdt
Алексей2003
2fdt
а, т.е. вы предлагаете, чтобы мы сами тут сэмулировали все таблицы, и получили прогонный скрипт, который не завершится с ошибкой?

для спящего время бодрствования равносильно сну


Ааа, в этом смысле, я не так понял... попробую сейчас собрать


Я тут поймал себя на мысли что сгенерить без динамического запроса просто, но без всех таблиц и данных в нем что это даст? Выполнить то его все равно не получиться, или я туплю? Вы имели в виду только скрипт по теме или все же все таблицы, чтобы его можно было выполнить?

выполнить не получится. но прокручивать в уме, какой скрипт получится при динамическом SQL тяжеловато.. во всяком случае мне..
а так хоть можно будет оценить приблизительно.
30 июл 09, 11:40    [7477888]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

Откуда: Москва
Сообщений: 28
Glory
fdt
Алексей2003
а средство есть. SQL Profiler

для спящего время бодрствования равносильно сну


Нет есть только стандартная установка MS SQL и что в нее входит.

SQL Profiler входит в стандартную установку. Если только у вас не редакция MSDE/Express


Нашел. Сейчас попробую им попользоваться. Просто по таблице процессов ничего внятного я понять не мог. Видно что память и CPU на процессе растет, но не быстро и вроде бы нормально для выполнения запроса. Но только почему вставка не проходит так и не понятно.
30 июл 09, 11:44    [7477920]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
fdt
Видно что память и CPU на процессе растет, но не быстро и вроде бы нормально для выполнения запроса

а с чго вы взяли что нормально?

для спящего время бодрствования равносильно сну
30 июл 09, 11:45    [7477937]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

Откуда: Москва
Сообщений: 28
Алексей2003,

Основной запрос в процедуре, который подается на выполнение выглядит так

 select @@spid SPID, 'Фирма' Firm,[Customer No_], [Posting Date], [Due Date], [Leaving Date],[Agreement No_], [Make Code], [Model No_], VIN, [Option Code], [Purch_ Order Type], Area, [OAO Agreement], InvNo, InvDate, SumDZ, Last_Pay_Date, Pay, PDZ=sum(SumDZ+pay), PENI=0 
		from 
		(Select a.[Source No_][Customer No_],v.[Posting Date], v.[Agreement No_],v.[Make Code], v.[Model No_], v.vin, o.[Option Code], veh.[Purch_ Order Type], v.[Due Date], veh.[Leaving Date], a.Area, a.[OAO Agreement], 
			SumDZ=(select sum([Quantity])*1.18*sum(case when [Total Price]<>0 then [Total Price] else ([Vehicle Portion]+[Manuf_ Option Portion]+[Own Option Portion]) end) 
				from БД..[Фирма$Vehicle Ledger Entry] 
				where vin=v.vin and [Entry Type]=1 and [Posting Date]<'Jul 28 2009 12:00AM' ), pay=IsNull(Sum(op.SumOP),0), op.Last_Pay_Date, inv.InvNo, inv.InvDate 
		from БД..[Фирма$Vehicle Ledger Entry] as v 
			inner join БД..[Фирма$Vehicle] as veh on veh.vin=v.vin
			inner join БД..[Фирма$Agreement] a on a.Code=v.[Agreement No_] and a.Blocked=0  left outer join БД..[Фирма$Vehicle Option] as o on o.VIN = v.VIN and o.[Option Type]=1
			LEFT OUTER JOIN  #TmpTblPayments as op on op.VIN=v.VIN and op.[Customer No_]=a.[Source No_] and op.[Agreement]=v.[Agreement No_] 
			left outer join #TmpTblInvoices inv on inv.vin=v.vin 
		where v.[Entry Type]=1 and v.[Posting Date]<'Jul 28 2009 12:00AM'  and not exists(select null from БД..[Фирма$Vehicle Ledger Entry] 
					where [VIN]=v.vin and [Entry No_]>v.[Entry No_] and [Posting Date]<='Jul 28 2009 12:00AM' and [Entry Type]=1 ) 
			and (v.[Posting date]>='2009-04-01 00:00:00.000' or exists(select sill.[Posting date], sill.vin, sihh.[Agreement No_],agr.Description, agr.Blocked 
						from БД..[Фирма$Sales Invoice Line] sill 
							inner join БД..[Фирма$Sales Invoice Header] sihh on sihh.No_=sill.[Document No_] 
							and not exists( SELECT NULL FROM БД..[Фирма$Sales credit memo header] scmh 
											inner join БД..[Фирма$Sales credit memo line] scml on scml.[Document No_]=scmh.No_ and scml.vin=sill.vin 
											WHERE scmh.[applies-to invoice no_] = sihh.no_ and scmh.[Posting Date]<'Jul 28 2009 12:00AM') 
						inner join БД..[Фирма$Agreement] agr on agr.Code=sihh.[Agreement No_] and agr.Blocked=0 where sill.vin=v.vin)) 
		group by a.[Source No_], v.[Posting Date], v.[Agreement No_], v.[Make Code], v.[Model No_], v.vin, o.[Option Code], veh.[Purch_ Order Type], v.[Due Date], veh.[Leaving Date], a.Area, a.[OAO Agreement], op.Last_Pay_Date, inv.InvNo, inv.InvDate 
		having (round((select sum([Quantity])*1.18*sum(case when [Total Price]<>0 then [Total Price] else ([Vehicle Portion]+[Manuf_ Option Portion]+[Own Option Portion]) end) 
				from БД..[Фирма$Vehicle Ledger Entry] 
				where vin=v.vin and [Entry Type]=1 and [Posting Date]<'Jul 28 2009 12:00AM' )+IsNull(Sum(op.SumOP),0),2))>0.01) d 
		group by [Customer No_], [Posting Date], [Due Date], [Leaving Date],[Agreement No_], [Make Code], [Model No_], VIN, [Option Code], [Purch_ Order Type], Area, [OAO Agreement], InvNo, InvDate, SumDZ, Last_Pay_Date, Pay
30 июл 09, 11:48    [7477964]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
отлично. теперь этот запрос запускаете, и выкладываете план как в 2005 так и в 2000 серверах.

для спящего время бодрствования равносильно сну
30 июл 09, 11:50    [7477985]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а еще лучше полный план. с циферками по времени выполнения.
set showplan_all

для спящего время бодрствования равносильно сну
30 июл 09, 11:53    [7478017]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

Откуда: Москва
Сообщений: 28
Алексей2003
а еще лучше полный план. с циферками по времени выполнения.
set showplan_all

для спящего время бодрствования равносильно сну


Попробовал построить план, но я до этого всегда его с помощью EM строил, а он там строится в диаграмме. А как построить детальный план выполнения я не нашел, подскажите?
Кстати при выполнении сформированного скрипта вставка проходит нормально, это мое упущение как то не пробовал не динамический скрипт выполнять для вставки во временную таблицу. Наверно это значат что когда процедура выполняется то 2000 сервер не может план запроса построить ? Может в этом дело
30 июл 09, 12:19    [7478297]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
проходящий.
Guest
fdt,
думаете строку
set showplan_all

Вам просто так, от нечего делать, написали?
30 июл 09, 12:23    [7478326]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

Откуда: Москва
Сообщений: 28
проходящий.
fdt,
думаете строку
set showplan_all

Вам просто так, от нечего делать, написали?


ну я и не думаю что просто так, поэтому прежде чем написать вопрос попробовал эту строку выполнить перед запросом. Но мне EM на это выдает следующее
автор
Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'showplan_all'.

Может его как-то надо выполнять по особенному?
30 июл 09, 12:30    [7478401]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Glory
Member

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

ну я и не думаю что просто так, поэтому прежде чем написать вопрос попробовал эту строку выполнить перед запросом. Но мне EM на это выдает следующее
автор
Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'showplan_all'.

Может его как-то надо выполнять по особенному?

Надо проявить чуть смекалки и найти в хелпе полное описание синтаксиса этой команды
30 июл 09, 12:32    [7478425]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

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

Признаю мой косяк, иногда хочется сразу воспользоваться советом без разбирательства. Пойду читать хелп, но все же может 2000 сервер не построить план динамического запроса который выполняется в процедуре ?
30 июл 09, 12:36    [7478456]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
Glory
Member

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

Признаю мой косяк, иногда хочется сразу воспользоваться советом без разбирательства. Пойду читать хелп, но все же может 2000 сервер не построить план динамического запроса который выполняется в процедуре ?

Сервер не может не построить план. Потому что если он не построит план, то не сможет выполнять запрос.
30 июл 09, 12:38    [7478478]     Ответить | Цитировать Сообщить модератору
 Re: Вставка результата процедуры в временную таблицу  [new]
fdt
Member

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

В том то и проблема, что процедура отдельно выполняется. Запрос который она возвращает отдельно выполняется и даже если его с insert в временную таблицу написать отрабатывает на ура. Но если написать insert into #t exec то это виснет и план запроса на этот оператор практически пустой, а на запрос строиться нормально.
30 июл 09, 13:05    [7478736]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить