Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 можно ли проще?  [new]
Che0
Member

Откуда:
Сообщений: 299
ВОт задание:

• Определить SID текущего пользователя (открывшего отчет), найти соответствующий SID в колонке «UserSID» таблицы «dbo.BizUsers», для найденной строки выбрать значение колонки «UserID»
• Определить для найденного значения «UserID» все возможные значения колонки «RoleID»из таблицы «dbo.Users_Roles»
• Для найденных значений «RoleID» проверить наличие записей с таким же «RoleID» в таблице «dbo.BizDataPermissions». Если в таблице отсутствуют записи хотя бы по одному значению «RoleID» -вывести 'hello'
ВОт мой код:
DECLARE @CountBizData int;
DECLARE @CountUserRoles int;

  SET @CountBizData = (
   SELECT COUNT(*)
  FROM [STS_App].[dbo].[Users_Roles]
  inner join [STS_App].[dbo].[BizUsers] on [STS_App].[dbo].[Users_Roles].[UserID]=
  [STS_App].[dbo].[BizUsers].[UserID]
  inner join [STS_App].[dbo].[BizDataPermissions] on [STS_App].[dbo].[Users_Roles].[RoleID]=
  [STS_App].[dbo].[BizDataPermissions].[RoleID]
  WHERE [STS_App].[dbo].[BizUsers].[UserSID]='S-1-5-21-3287831667-1201800720-717243645-6402'
  )
  
  SET @CountUserRoles=(
   SELECT COUNT(*)
  FROM [STS_App].[dbo].[Users_Roles]
  inner join [STS_App].[dbo].[BizUsers] on [STS_App].[dbo].[Users_Roles].[UserID]=
  [STS_App].[dbo].[BizUsers].[UserID]
   WHERE [STS_App].[dbo].[BizUsers].[UserSID]='S-1-5-21-3287831667-1201800720-717243645-6402'
   )
   
   if @CountBizData<@CountUserRoles print 'hello'

я еще совсем новичок в tsql поэтому спрашиваю- можно ли проще и элегантнее? а то как то громоздко выглядит
11 июл 11, 12:49    [10955115]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
Che0
Member

Откуда:
Сообщений: 299
и можно ли присвоить переменной результат множественного значения sql запроса?
11 июл 11, 13:09    [10955248]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
А так не?

естественно не проверял..

if (
select top 1 RoleID from dbo.Users_Roles
where [Users_Roles].[UserID]=USER_ID()
end RoleID in (select roleid from dbo.BizDataPermissions)
) is not null print 'hello'

11 июл 11, 13:11    [10955259]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Che0
и можно ли присвоить переменной результат множественного значения sql запроса?


ну если это множественное значение будет возвращено в виде xml или эта переменная будет в виде табличной переменной :-)
11 июл 11, 13:13    [10955271]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
Che0
Member

Откуда:
Сообщений: 299
Andrey Sribnyak
А так не?

естественно не проверял..

if (
select top 1 RoleID from dbo.Users_Roles
where [Users_Roles].[UserID]=USER_ID()
end RoleID in (select roleid from dbo.BizDataPermissions)
) is not null print 'hello'



не как то не работает, ругаеться на
end RoleID
11 июл 11, 13:55    [10955547]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
Che0,

ну чисто логически e->a
это точно твой запрос выше?
11 июл 11, 14:01    [10955600]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
хмmm
Guest
Che0
не как то не работает, ругаеться на
end RoleID


if (
select top 1 RoleID from dbo.Users_Roles
where [Users_Roles].[UserID]=USER_ID()
and RoleID in (select roleid from dbo.BizDataPermissions)
) is not null print 'hello'


11 июл 11, 15:17    [10956204]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
Che0
Member

Откуда:
Сообщений: 299
хмmm,
а так работает)), только зачем здесь
top 1
ведь мне надо проверять все записи, а не только первую
11 июл 11, 15:41    [10956385]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
Хмmm
Guest
Che0
хмmm,
а так работает)), только зачем здесь
top 1
ведь мне надо проверять все записи, а не только первую


Потому, как в условии есть: Если в таблице отсутствуют записи хотя бы по одному значению

Только там тогда по другому:

if (
select top 1 RoleID from dbo.Users_Roles
where [Users_Roles].[UserID]=USER_ID()
end RoleID not in (select roleid from dbo.BizDataPermissions)
) is not null print 'hello'

11 июл 11, 15:47    [10956439]     Ответить | Цитировать Сообщить модератору
 Re: можно ли проще?  [new]
Che0
Member

Откуда:
Сообщений: 299
Хмmm,
так а Если в таблице первая запись присутствует, а отсутствует вторая? тогда ведь не подходит

З.ы. Позно уже, может я что и путаю ...
11 июл 11, 23:53    [10958891]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить