Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Область видимости и жизни # и ## таблиц / 11 сообщений из 11, страница 1 из 1
02.07.2002, 11:14:57
    #32034672
AndreK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
Добрый день!
Споткнулся о задачку:
из медленно растущего справочника надо, чтоб клиенты независимо друг от друга получали каждый свой "кусок". Решил состряпать ХП с параметром:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE PROCEDURE zakrep @d datetime AS

  if exists (select * from tempdb..sysobjects where id = object_id(N'#zakrep') and OBJECTPROPERTY(id, N'IsUserTable') =  1 )
drop table #zakrep


  CREATE TABLE [dbo].[#zakrep] (
	[kamp] [tinyint] NULL ,
	[ele] [smallint] NULL ,
	[korp] [tinyint] NULL ,
	[brig] [tinyint] NULL ,
	[brigadir] [varchar] ( 50 ) NULL ,
	[master] [varchar] ( 50 ) NULL ,
	[d_otkl] [datetime] NULL ,
	[d_nach] [datetime] NULL ,
	[d_kon] [datetime] NULL ,
	[d_podkl] [datetime] NULL ,
	[vid_rem] [varchar] ( 50 ) NULL ,
	[prich] [varchar] ( 50 ) NULL ,
	[srok_sek_rem] [int] NULL ,
	[srok_sek_slug] [int] NULL ,
	[id_nom] [int] NULL 
) ON [PRIMARY]

INSERT INTO #zakrep SELECT * FROM remont
WHERE ((STR(ele) + '_' + CONVERT(char( 23 ), d_otkl))= ANY (SELECT str(ele) + '_' + CONVERT(char( 23 ), MAX(d_otkl))
   FROM remont WHERE d_otkl <= @d GROUP BY ele))


Временную табл. решил делать, т.к. в BOL прочитал:
"Local temporary tables have a single number sign (#) as the first character of their names; they are visible only to the current connection for the user; and they are deleted when the user disconnects from computers running Microsoft® SQL Server™. "

Проверяю в QA:
Код: plaintext
1.
2.
declare @d datetime
set @d=getdate()
exec zakrep @d


На запрос в QA
Код: plaintext
select * from #zakrep

получаю:
Код: plaintext
1.
Server: Msg  208 , Level  16 , State  1 , Line  1 
[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name '#zakrep'.


В то же время Profiler сообщает, что создание #zakrep и попытка посмотреть ее содержание сделаны в одном connect:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
NT User Name	Event Class	Text	Application Name	SPID	Object ID	Transaction ID	Start Time
-Connection ID =  0  ( 1  Events)
  kl	TraceStart						 13 : 06 : 55 . 489 
-Connection ID =  486  ( 10  Events)
  kl	ExistingConnection		MS SQL Query Analyzer	 11 			 11 : 24 : 43 . 340 
 +kl	SQL:StmtStarting	@d=getdate() 	MS SQL Query Analyzer	 11 			 13 : 07 : 17 . 710 
 +kl	SQL:StmtStarting	exec zakrep @d 	MS SQL Query Analyzer	 11 			 13 : 07 : 17 . 710 
 +kl	SP:Starting	zakrep	MS SQL Query Analyzer	 11 	 1858105660 		 13 : 07 : 17 . 720 
 +kl	SP:StmtStarting	if exists (select * from tempdb..sysobjects where id = object_id(N'#z') and OBJECTPROPERTY(id, N'IsUserTable') =  1 ) 	MS SQL Query Analyzer	 11 	 1858105660 		 13 : 07 : 17 . 720 
 +kl	SP:StmtStarting	CREATE TABLE [dbo].[#zakrep] ( [kamp] [tinyint] NULL , [ele] [smallint] NULL , [korp] [tinyint] NULL , [brig] [tinyint] NULL , [brigadir] [varchar] ( 50 ) NULL , [master] [varchar] ( 50 ) NULL , [d_otkl] [datetime] NULL , [d_nach] [datetime] NULL , [d_kon] [datetime] NULL , [d_podkl] [datetime] NULL , [vid_rem] [varchar] ( 50 ) NULL , [prich] [varchar] ( 50 ) NULL , [srok_sek_rem] [int] NULL , [srok_sek_slug] [int] NULL , [id_nom] [int] NULL ) ON [PRIMARY] 	MS SQL Query Analyzer	 11 	 1858105660 		 13 : 07 : 17 . 720 
 +kl	SP:StmtStarting	INSERT INTO #zakrep SELECT * FROM remont WHERE ((STR(ele) + '_' + CONVERT(char( 23 ), d_otkl))= ANY (SELECT str(ele) + '_' + CONVERT(char( 23 ), MAX(d_otkl)) FROM remont WHERE d_otkl <= @d GROUP BY ele))	MS SQL Query Analyzer	 11 	 1858105660 		 13 : 07 : 17 . 730 
 +kl	SP:StmtStarting	INSERT INTO #zakrep SELECT * FROM remont WHERE ((STR(ele) + '_' + CONVERT(char( 23 ), d_otkl))= ANY (SELECT str(ele) + '_' + CONVERT(char( 23 ), MAX(d_otkl)) FROM remont WHERE d_otkl <= @d GROUP BY ele))	MS SQL Query Analyzer	 11 	 1858105660 		 13 : 07 : 17 . 760 
 +kl	SP:Completed	zakrep	MS SQL Query Analyzer	 11 	 1858105660 		 13 : 07 : 18 . 080 
 +kl	SQL:StmtStarting	select * from #zakrep 	MS SQL Query Analyzer	 11 			 13 : 07 : 18 . 080 
-Connection ID =  487  ( 1  Events)
  kl	ExistingConnection		MS SQLEM	 12 			 11 : 24 : 55 . 447 


Явно что-то где-то я не дочитал, ибо не верю, что может быть такое разногласие BOL и практики. Но где и что???
Ткните носом, кто знает.
А может я не по той дороге пошел? Может мою задачку надо решать по-другому?
Спасибо.
...
Рейтинг: 0 / 0
02.07.2002, 11:18:19
    #32034674
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
Там же чуть ниже

" A local temporary table created in a stored procedure is dropped automatically when the stored procedure completes. The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. The table cannot be referenced by the process which called the stored procedure that created the table"
...
Рейтинг: 0 / 0
02.07.2002, 11:18:56
    #32034675
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
А где противоречие? Конечно, создание #zakrep и попытка посмотреть ее содержание сделаны в одном connect. Ведь одно окно QA - это и есть один коннект...
...
Рейтинг: 0 / 0
02.07.2002, 11:20:21
    #32034676
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
Если я не прав, поправьте ..
Временные таблицы существуют в рамках транзакции.
Процедура выполнилась - открылась и закрылась транзакция, таблица удалилась
...
Рейтинг: 0 / 0
02.07.2002, 11:34:52
    #32034681
AndreK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
> Glory
... М-м-м-да.. В подробное пояснение по созданию таблиц посредством T-SQL не догадался забраться.
> Rom
Скорее всего Вы правы, хотя опыта такого у меня нет. Будем нарабатывать...

Спасибо.

Но главный вопрос остается, а куда выбрасывать кусок справочника, независимый от других клиентов? Неужель на раб. станцию Дельфой?
...
Рейтинг: 0 / 0
02.07.2002, 11:53:28
    #32034689
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
Ya sozdayu v podobnom sluchaye VIEW, cherez kotoriy idyot obrascheniye - to yest` dlya kazhdogo spravochnika - svoyo predstavleniye s otborom po opredelyonnomu klyuchu - rabotayet otlichno...
...
Рейтинг: 0 / 0
02.07.2002, 11:57:44
    #32034690
Белов Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
> Andrek
в хранимой процедуре поставь в конце
select * from #temp_table
соответсвенно на Дельфях привяжи DataSource
...
Рейтинг: 0 / 0
02.07.2002, 12:02:07
    #32034695
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
А зачем вообще нужна временная таблица если используется

INSERT INTO #zakrep SELECT * FROM remont

Разве нельзя оставить в процедуре только сам запрос ?

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE zakrep @d datetime AS

SELECT * FROM remont
WHERE ((STR(ele) + '_' + CONVERT(char( 23 ), d_otkl))= ANY (SELECT str(ele) + '_' + CONVERT(char( 23 ), MAX(d_otkl))
   FROM remont WHERE d_otkl <= @d GROUP BY ele))
GO
...
Рейтинг: 0 / 0
02.07.2002, 12:41:02
    #32034705
AndreK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
>Glory
Тогда я опять чего-то фундаментального не знаю - ну сделали
Код: plaintext
select * from remont
, а куда? Где клиент должен ловить результаты выборки? Там, где показал Белов Владимир?
Во-о-о, В Дельфях я плаваю похлеще чем в SQL.
Спасибо, поплыл... на связку Delphi-SQL.
...
Рейтинг: 0 / 0
02.07.2002, 12:50:38
    #32034708
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
В Делфах на форму бросаешь TStoredProcedure,
привязываешь ее к своей процедуре, описываешь параметы, делаешь опен. Твоя процедура возвратит TDataSet. Далее связка например TDataSource -> TDBGrid
...
Рейтинг: 0 / 0
02.07.2002, 13:05:28
    #32034713
AndreK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости и жизни # и ## таблиц
Ученье - свет, а неученых - тьма.
(Незнайка)

Спасибо, Rom
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Область видимости и жизни # и ## таблиц / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]