powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Область видимости и жизни # и ## таблиц
11 сообщений из 11, страница 1 из 1
Область видимости и жизни # и ## таблиц
    #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
Область видимости и жизни # и ## таблиц
    #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
Область видимости и жизни # и ## таблиц
    #32034675
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где противоречие? Конечно, создание #zakrep и попытка посмотреть ее содержание сделаны в одном connect. Ведь одно окно QA - это и есть один коннект...
...
Рейтинг: 0 / 0
Область видимости и жизни # и ## таблиц
    #32034676
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я не прав, поправьте ..
Временные таблицы существуют в рамках транзакции.
Процедура выполнилась - открылась и закрылась транзакция, таблица удалилась
...
Рейтинг: 0 / 0
Область видимости и жизни # и ## таблиц
    #32034681
Фотография AndreK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Glory
... М-м-м-да.. В подробное пояснение по созданию таблиц посредством T-SQL не догадался забраться.
> Rom
Скорее всего Вы правы, хотя опыта такого у меня нет. Будем нарабатывать...

Спасибо.

Но главный вопрос остается, а куда выбрасывать кусок справочника, независимый от других клиентов? Неужель на раб. станцию Дельфой?
...
Рейтинг: 0 / 0
Область видимости и жизни # и ## таблиц
    #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
Область видимости и жизни # и ## таблиц
    #32034690
Фотография Белов Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Andrek
в хранимой процедуре поставь в конце
select * from #temp_table
соответсвенно на Дельфях привяжи DataSource
...
Рейтинг: 0 / 0
Область видимости и жизни # и ## таблиц
    #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
Область видимости и жизни # и ## таблиц
    #32034705
Фотография AndreK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Glory
Тогда я опять чего-то фундаментального не знаю - ну сделали
Код: plaintext
select * from remont
, а куда? Где клиент должен ловить результаты выборки? Там, где показал Белов Владимир?
Во-о-о, В Дельфях я плаваю похлеще чем в SQL.
Спасибо, поплыл... на связку Delphi-SQL.
...
Рейтинг: 0 / 0
Область видимости и жизни # и ## таблиц
    #32034708
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Делфах на форму бросаешь TStoredProcedure,
привязываешь ее к своей процедуре, описываешь параметы, делаешь опен. Твоя процедура возвратит TDataSet. Далее связка например TDataSource -> TDBGrid
...
Рейтинг: 0 / 0
Область видимости и жизни # и ## таблиц
    #32034713
Фотография AndreK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ученье - свет, а неученых - тьма.
(Незнайка)

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


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