Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание #таблицы / 23 сообщений из 23, страница 1 из 1
03.09.2002, 10:10:52
    #32047628
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Господа подскажите как написать аналогичное только чтобы работало.
declare @st nvarchar(1000)
select @st="
select * into #table from ##table1"+user_name()
exec (@st)
select * from #table - error

Create - insert сделать немогу т к точно не знаю структуру ##table1+user_name()
...
Рейтинг: 0 / 0
03.09.2002, 10:35:31
    #32047637
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
На мой взгляд это невозможно. И мне кажется что и Вам это не нужно - ну и что Вы будете делать с таблицей с незнакомой структрой?
Ну и по-моему делать такие таблицы "##table1"+user_name() - ну мягко говоря ненормально. Можно найти более красивые решения
...
Рейтинг: 0 / 0
03.09.2002, 10:40:26
    #32047642
Nickolay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Насчет области видимости временных таблиц на этом форуме было сказано много, так что повторяться на эту тему не буду. А для конкретного случая есть два пути решения:
1. select @st='
select * into #table from ##table1'+user_name() +
' GO select * from #table'
exec (@st)

2. select @st='
select * into tmp_table from ##table1'+user_name()'
exec (@st)
select * from tmp_table
DROP tmp_table

...правда во втором случае прийдется дать пользователю права на создание таблиц
...
Рейтинг: 0 / 0
03.09.2002, 10:40:29
    #32047643
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Помоему гдето так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table ##t1 (i nvarchar( 20 ))
declare @a int
set @a =  10 
while @a!= 0  begin
  insert into ##t1 values(cast(@a as nvarchar( 20 )))
  set @a=@a- 1 
end
 --select * from ##t1
 
CREATE TABLE #t (a nvarchar( 20 ))
insert into #t select (i+ suser_sname()) from ##t1
select a from #t
drop table #t
drop table ##t1
...
Рейтинг: 0 / 0
03.09.2002, 10:44:19
    #32047647
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
а какое можно найти решение, если мне нужно чтобы разные пользователи работали со своими временными таблицами и при этом не пересекались.
Структуру не знаю потому что переменное число столбцов. ее мне просто надо чуть-чуть поизменять. Ничего в голову подходящего не лезет.
...
Рейтинг: 0 / 0
03.09.2002, 10:50:29
    #32047649
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
дык они и так разные ... для каждого конекта...
...
Рейтинг: 0 / 0
03.09.2002, 10:53:48
    #32047653
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Вот именно они разные а мне их нужно видеть из разных процедур.
...
Рейтинг: 0 / 0
03.09.2002, 11:16:27
    #32047661
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Maxx а что делает твоя процедура?

У Nickolay работает но 1 вариант отпадает т к таблицу из процедуры всеравно невидно. а писать все в ' ' негодится. 2 -й вариан с раздачей доступа тоже некатит.

Получается что никак нормально сделать нельзя.
...
Рейтинг: 0 / 0
03.09.2002, 11:33:51
    #32047670
Nickolay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
ну если уж очень надо, то можешь скомбинировать типа:
select @st='
select * into tmp_table from ##table1'+user_name()'
exec (@st)
select * into #table from tmp_table
DROP tmp_table
-тогда все и увидишь из своей процдуры. Правда получается все это через одно место, но раз надо, так надо...
...
Рейтинг: 0 / 0
03.09.2002, 11:44:48
    #32047677
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Просто сшивает значения из ##t1 c suser+name() и заносит в #t. Я просто не конца понял вопрос поетому родилось ето:)))
...
Рейтинг: 0 / 0
03.09.2002, 11:48:44
    #32047678
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Я бы например сделал постоянную таблицу со всеми возможными полями и полем-идентификатором пользователя(или процесса). Но если знать задачу наверное можно и еще что-то придумать
...
Рейтинг: 0 / 0
03.09.2002, 12:10:32
    #32047686
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
задача например может быть такой:
есть таблица СКЛАДЫ
пользователю нужно выполнить отчет приход на склады.
склады он выбирает через таблицу ##склады + system_user() , которая формируется как таблица СКЛАДЫ + altre table поле "выбрано"
например


declare @St nvarchar(1000)
set nocount on
select @st="
IF EXISTS (SELECT name FROM tempdb..sysobjects
WHERE name = '##склады"+user_name()+"' AND xtype = 'U')
DROP Table ##склады"+user_name()
exec(@st)


select @st="
SELECT *
into ##склады"+user_name()+"
FROM dbo.[склад]
ORDER BY Наименование_склада"
exec(@st)

select @st="
ALTER TABLE [##продажи"+user_name()+"] ADD CONSTRAINT [PK_##склады"+user_name()+"] PRIMARY KEY
( [Код_Склад])"
exec(@st)

select @st="
ALTER TABLE [##склады"+user_name()+"] ADD [Выбрано] bit not null CONSTRAINT продажи_склады"+user_name()+" DEFAULT 0"
exec(@st)



Далее пользователь в ACCESS выбирает склады
и в отчете проверяется in select from ##склады"+user_name()+" какие выбраны, и создается отчет.
...
Рейтинг: 0 / 0
03.09.2002, 12:38:50
    #32047708
dkstranger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Тут у меня было две проблемы
1. Инициализационный скрипт
каждому коннекту
/его нельзя делать из exec или
процедуры - таблицы не видятся/
2. Для процедур - обработчиков
передается имя таблицы как
параметр
И с тем и другим натрахались достаточно,
но все работает ...
...
Рейтинг: 0 / 0
03.09.2002, 13:08:49
    #32047729
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
2 Anton_Snitko
А почему бы сразу в процедуру не передавать какие по каким складам нужно делать отчет? Это к тому же могло бы ускорить выполнение отчета.
Но даже если и делать через глобальные ВТ(чего я бы делать не стал) - всё равно структура таблицы известна.
...
Рейтинг: 0 / 0
03.09.2002, 13:23:35
    #32047738
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
И как мне передать в процедуру какие склады выбраны??
(как текстовую переменную, а потом ее проверять , выдирать по кускам и тд...?) Можете пример какой - нибуть скинуть, или как-то по другому?

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

чесно говоря я задолбался с этими table + system_user()
и сплошными динамичискими запросами.
...
Рейтинг: 0 / 0
03.09.2002, 13:37:39
    #32047747
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
А такой вариант решения проблемы чем не устраивает? Этот способ уже не раз обсуждался на форуме. Для каждого коннекта будет создана своя временная таблица, пересекаться они не будут, видимость в хранимых процедурах тоже обеспечена... Вот в такую временную таблицу вы и запихнете список идентификаторов выбранных складов...

Создайте хранимую процедуру:
Код: plaintext
1.
2.
3.
4.
create procedure XP_SelectFromTempTable
As
	Select * from #table
GO


И исполните ее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table #table
(
	pk int identity( 1 , 1 ) not null primary key clustered,
	varcharfield nvarchar( 10 ) null
)

insert into #table (varcharfield) values('А')
insert into #table (varcharfield) values('этого')
insert into #table (varcharfield) values('достаточно')
insert into #table (varcharfield) values('?')

execute XP_SelectFromTempTable

drop table #table
GO


Это подходит для вашей ситуации?

С уважением,
Александр Степанов.
...
Рейтинг: 0 / 0
03.09.2002, 14:03:41
    #32047762
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Александр я попробовал Ваш вариант, при изменении таблицы ИЗ ACCESS выдается ошибка database name '' ignored,referencing object in tempdb , или может таблицу #XXX
из клиента вообще напрямую изменять нельзя, как быть?
...
Рейтинг: 0 / 0
03.09.2002, 14:18:45
    #32047768
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Не знал, что Вы работаете через Access. Ну, не страшно. В любом случае Вы можете сделать отбор складов в таблицу Access, а затем с помощью кода "запихнуть" в готовый объект "запрос к серверу" SQL код следующего вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table #table
(
	pk int identity( 1 , 1 ) not null primary key clustered,
	varcharfield nvarchar( 10 ) null
)

insert into #table (varcharfield) values('А')
insert into #table (varcharfield) values('этого')
insert into #table (varcharfield) values('достаточно')
insert into #table (varcharfield) values('?')

execute XP_SelectFromTempTable


с результатами которого Вы и сможете в дальнейшем работать.
...
Рейтинг: 0 / 0
03.09.2002, 14:28:14
    #32047774
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
В adp проектах ACCESS таблицы только на сервере.
...
Рейтинг: 0 / 0
03.09.2002, 15:10:19
    #32047797
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
И как мне передать в процедуру какие склады выбраны??

1. В виде строки ("1,5,18"), а в процедуре написать нечто вроде
Код: plaintext
1.
2.
3.
create proc ViewSklad @sklady varchar( 8000 )
as
select * from Sklad where @sklady like '%,'+convert(varchar( 10 ),id)+',%'

но могут быть и другие варианты

2.Сделать таблицу для передачи параметров
Код: plaintext
1.
2.
3.
4.
5.
id uniqueidentifier
key int  --типа параметра
 
value sql_variant  -- значение параметра 
 

Заполнять таблицу отдельно, а в процедуру передавать id

Наверное могут быть и еще варианты, но эти два всяко проще того с чем Вы бьётесь.
В любом случае глобальные ВТ и динамические запросы - это последнее к чему нужно обращаться(нет, пожалуй предпоследнее; последнее - курсоры)
...
Рейтинг: 0 / 0
03.09.2002, 15:31:12
    #32047809
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
все равно приходится создавать таблицу в которой пользователь будет ставить галочки, и чтобы данные таблицы не пересекались.

Наверное в ACCESS ничего кроме как я написал придумать нельзя.
...
Рейтинг: 0 / 0
03.09.2002, 16:17:39
    #32047829
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Да можно.
Одну таблу на всех. И spid указывать.
...
Рейтинг: 0 / 0
04.09.2002, 10:10:56
    #32047936
Anton_Snitko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание #таблицы
Одну таблу постоянно висячую в базе, не временную, ерунда по-моему.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание #таблицы / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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