powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание #таблицы
23 сообщений из 23, страница 1 из 1
Создание #таблицы
    #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
Создание #таблицы
    #32047637
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд это невозможно. И мне кажется что и Вам это не нужно - ну и что Вы будете делать с таблицей с незнакомой структрой?
Ну и по-моему делать такие таблицы "##table1"+user_name() - ну мягко говоря ненормально. Можно найти более красивые решения
...
Рейтинг: 0 / 0
Создание #таблицы
    #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
Создание #таблицы
    #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
Создание #таблицы
    #32047647
Anton_Snitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какое можно найти решение, если мне нужно чтобы разные пользователи работали со своими временными таблицами и при этом не пересекались.
Структуру не знаю потому что переменное число столбцов. ее мне просто надо чуть-чуть поизменять. Ничего в голову подходящего не лезет.
...
Рейтинг: 0 / 0
Создание #таблицы
    #32047649
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык они и так разные ... для каждого конекта...
...
Рейтинг: 0 / 0
Создание #таблицы
    #32047653
Anton_Snitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот именно они разные а мне их нужно видеть из разных процедур.
...
Рейтинг: 0 / 0
Создание #таблицы
    #32047661
Anton_Snitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxx а что делает твоя процедура?

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

Получается что никак нормально сделать нельзя.
...
Рейтинг: 0 / 0
Создание #таблицы
    #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
Создание #таблицы
    #32047677
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто сшивает значения из ##t1 c suser+name() и заносит в #t. Я просто не конца понял вопрос поетому родилось ето:)))
...
Рейтинг: 0 / 0
Создание #таблицы
    #32047678
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы например сделал постоянную таблицу со всеми возможными полями и полем-идентификатором пользователя(или процесса). Но если знать задачу наверное можно и еще что-то придумать
...
Рейтинг: 0 / 0
Создание #таблицы
    #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
Создание #таблицы
    #32047708
dkstranger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут у меня было две проблемы
1. Инициализационный скрипт
каждому коннекту
/его нельзя делать из exec или
процедуры - таблицы не видятся/
2. Для процедур - обработчиков
передается имя таблицы как
параметр
И с тем и другим натрахались достаточно,
но все работает ...
...
Рейтинг: 0 / 0
Создание #таблицы
    #32047729
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Anton_Snitko
А почему бы сразу в процедуру не передавать какие по каким складам нужно делать отчет? Это к тому же могло бы ускорить выполнение отчета.
Но даже если и делать через глобальные ВТ(чего я бы делать не стал) - всё равно структура таблицы известна.
...
Рейтинг: 0 / 0
Создание #таблицы
    #32047738
Anton_Snitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как мне передать в процедуру какие склады выбраны??
(как текстовую переменную, а потом ее проверять , выдирать по кускам и тд...?) Можете пример какой - нибуть скинуть, или как-то по другому?

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

чесно говоря я задолбался с этими table + system_user()
и сплошными динамичискими запросами.
...
Рейтинг: 0 / 0
Создание #таблицы
    #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
Создание #таблицы
    #32047762
Anton_Snitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр я попробовал Ваш вариант, при изменении таблицы ИЗ ACCESS выдается ошибка database name '' ignored,referencing object in tempdb , или может таблицу #XXX
из клиента вообще напрямую изменять нельзя, как быть?
...
Рейтинг: 0 / 0
Создание #таблицы
    #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
Создание #таблицы
    #32047774
Anton_Snitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В adp проектах ACCESS таблицы только на сервере.
...
Рейтинг: 0 / 0
Создание #таблицы
    #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
Создание #таблицы
    #32047809
Anton_Snitko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все равно приходится создавать таблицу в которой пользователь будет ставить галочки, и чтобы данные таблицы не пересекались.

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


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