powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Упростите запрос, если не трудно, а то как то громоздко получается
8 сообщений из 8, страница 1 из 1
Упростите запрос, если не трудно, а то как то громоздко получается
    #32065023
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
6.5

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
UPDATE 
	Users 
SET 
	IDPermission=(SELECT 
		      		IDPermission=CASE G.Name
						WHEN 'ARP' THEN  1 
						WHEN 'OPK' THEN  2 
						WHEN 'OAP' THEN  3 
						WHEN 'UOP' THEN  4 
						ELSE  0 
				          END	
		     FROM 
				sysusers U 
		     INNER JOIN 
				sysusers G 
		     ON  
				U.gid=G.uid 
		     WHERE 
				U.uid BETWEEN  2  AND  16383  AND 
				U.uid=Users.uid),

	Login=(SELECT Name FROM sysusers WHERE  uid=Users.uid)
...
Рейтинг: 0 / 0
Упростите запрос, если не трудно, а то как то громоздко получается
    #32065042
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А табличку типа

Код: plaintext
1.
2.
3.
4.
5.
ID Name
 0    NULL
 1    ARP
 2    OPK
 3    OAP
 4    UOP

не стОит ли здесь поиметь?

Недавно обсуждали тему, мол хорошо ли иметь справочники под всякие простенькие понятия... Я этот вопрос для себя давно решил и завожу их регулярно. Чуть ли не Yes/No/Unknown там прописываю... ;)
...
Рейтинг: 0 / 0
Упростите запрос, если не трудно, а то как то громоздко получается
    #32065046
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял зачем в Вашем запросе Вы соединяете Sysusers с самим собой, по моему запрос должен выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
UPDATE 	UR 
SET 	UR.IDPermission= CASE G.Name
  		             WHEN 'ARP' THEN  1 
			WHEN 'OPK' THEN  2 
			WHEN 'OAP' THEN  3 
			WHEN 'UOP' THEN  4 
			ELSE  0 
			END,
             UR.Login = G.Name
FROM Users UR
INNER JOIN sysusers G 
ON UR.uid=G.uid 
WHERE G.uid BETWEEN  2  AND  16383  AND 
...
Рейтинг: 0 / 0
Упростите запрос, если не трудно, а то как то громоздко получается
    #32065151
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
6.5

4 TBB

не понял, для вкл/выкл тоже таблички делаете?
про громоздко я имел ввиду другое


4 Genady

По-моему так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
UPDATE 
	RPUsers 
SET 
	RPUsers.IDPermission=CASE SGroups.Name
			WHEN 'ARP' THEN  1 
			WHEN 'OPK' THEN  2 
			WHEN 'OAP' THEN  3 
			WHEN 'URP' THEN  4 
			ELSE  0 
	             END,
	RPUsers.Login=SUsers.Name
FROM 
	sysusers SUsers
INNER JOIN 
	sysusers SGroups 
ON  
	SUsers.gid=SGroups.uid 
WHERE 
	SUsers.uid BETWEEN  2  AND  16383  AND 
	SUsers.uid=Users.uid)


в Users - только пользователи
SUsers.uid BETWEEN 2 AND 16383 AND - это идентификаторы юзеров базы, без dbo
остальные идентификаторы групп базы
'ARP'
'OPK'
'OAP'
'URP'
это как раз группы, в которых сидят юзеры
ваш запрос, если я не ошибаюсь, выбирает только юзеров, а мой еще и группы, в которых они сидят, потому и соединяю sysusers с самим собой
ваш всем Users.IDPermission присвоит 0
но все равно спасибо
...
Рейтинг: 0 / 0
Упростите запрос, если не трудно, а то как то громоздко получается
    #32065273
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ваш запрос, если я не ошибаюсь, выбирает только юзеров, а мой еще и группы, в которых они сидят, потому и соединяю sysusers с самим собой


Дык ить, формулируйте нормально задачу и все ясно будет. :-)

Кстати, Вы уверены что Ваш запрос сработает?
Что мне здается его надо немножечко не так писать. А например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
UPDATE 
	RPUsers 
SET 
	RPUsers.IDPermission=CASE SGroups.Name
			WHEN 'ARP' THEN  1 
			WHEN 'OPK' THEN  2 
			WHEN 'OAP' THEN  3 
			WHEN 'URP' THEN  4 
			ELSE  0 
	             END,
	RPUsers.Login=SUsers.Name
FROM RPUsers
inner join sysusers SUsers
on SUsers.uid=RPUsers.uid
INNER JOIN 
	sysusers SGroups 
ON  
	SUsers.gid=SGroups.uid 
WHERE 
	SUsers.uid BETWEEN  2  AND  16383  
...
Рейтинг: 0 / 0
Упростите запрос, если не трудно, а то как то громоздко получается
    #32065278
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может вместо 1234 IDPermission'ам лучше присваивать UID групп? Хотя как знаете.

А у меня есть один совершенно штатно заведенный усер с номером 16400, так что с диапазоном поаккуратнее нужно быть.
...
Рейтинг: 0 / 0
Упростите запрос, если не трудно, а то как то громоздко получается
    #32065392
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 VVG_

>лучше присваивать UID групп
нет, так нельзя
UID - меняется при удалении-добавлении

1,2,3,4 - это права юзеров находящихся в группах
права на уровне объектов даны группа этих юзеров, которые я перечислил, а 1,2,3,4 - для определения прав на уровне записей таблиц и влияния на ход выполнения той или иной процедуры. Юзеры из разных групп получают разные записи посредством одних и тех же хп. Но, я сейчас пришел к мысли, что по-моему это лишнее, я же могу получить сразу, в какой группе сидит юзер, и от этого отталкиваться, а не от 1,2,3,4

а 16400, это откуда? система сама ему такой uid присвоила? Если да, то может объясните в каких случаях это происходит?

4 Genady
Да, вроде как работает. В этом случае по логике это ж то тоже самое, что и уменя, только связь через джоин.
...
Рейтинг: 0 / 0
Упростите запрос, если не трудно, а то как то громоздко получается
    #32065508
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, ошибся. 16400 - это Database Role. Юсера все до 16383.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Упростите запрос, если не трудно, а то как то громоздко получается
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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