Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
 Аватар для PrAvalon
154 / 33 / 10
Регистрация: 27.10.2010
Сообщений: 87

Процедура для создания пользователей

16.03.2012, 13:09. Показов 5917. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать процедуру для создания пользователей.
Процедура должна создать пользователя на сервере и в БД
а также в таблицу Users добавить значения предоставленных ему прав.
Попробовал сделать так
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ALTER PROCEDURE [dbo].[usp_CreateUser]
@Login nvarchar(50), -- Логин пользователя
@Password nvarchar(50), -- Пароль пользователя
@IsAdmin bit, -- признак прав администратора
@IsUser bit -- признак прав простого пользователя
AS
BEGIN
    declare @SQL nvarchar(2000) 
    SET @SQL = ' CREATE LOGIN ' + QUOTENAME(@Login) + ' WITH PASSWORD = ' + QUOTENAME(@Password, '''') + ', CHECK_POLICY = OFF  
                        CREATE USER ' + QUOTENAME(@Login) + ' FOR LOGIN ' + QUOTENAME(@Login) +
                        ' IF ' + @IsAdmin + ' = 1  BEGIN EXEC sp_addrolemember "db_owner" ,' + @Login + ' END  
                         IF ' + @IsUser + ' = 1 BEGIN EXEC sp_addrolemember "db_datawriter" ,' + @Login + '
                         EXEC sp_addrolemember "db_datareader" ,' + @Login +' END 
                         IF  (select count (Us.Login) from Users AS Us WHERE Us.Login = @Login) = 0
                         BEGIN
                         INSERT INTO Users(Login,Right1,Right2) VALUES (@Login,@IsAdmin,@IsUser) 
                         END'
    EXECUTE (@SQL)
END
Но при выполнении получаю ошибку "The data types nvarchar and bit are incompatible in the add operator".
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2012, 13:09
Ответы с готовыми решениями:

Процедура для создания отчета о проданных товарах
Здравствуйте! У меня проблема и никак не могу разобраться. У меня имеется база данных Продуктового магазина. И необходимо с помощью...

Процедура для создания и перемещение Image
Программист из меня не очень, поэтому и прошу помощи. Нужен алгоритм, который бы при выборе картинки с панели(Panel) помещал её на форму. И...

Процедура для динамического создания новых элементов на форме С#
Доброго времени суток! Необходимо создать процедуру, при обращение к которой на форме будет создаваться новый Label.

2
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
16.03.2012, 14:52
Нужно выполнить CONVERT всех канкатенируемых переменных в nvarchar.)) у меня такая проблема тоже была. И еще не мешало быт в print() выводить содержимое @SQL, чтобы потом его скопировать для определения строки ошибки.
2
 Аватар для PrAvalon
154 / 33 / 10
Регистрация: 27.10.2010
Сообщений: 87
17.03.2012, 08:45  [ТС]
Спасибо _katon_ за ответ после внесения изменений процедура работает.
Привожу код процедуры с комментариями, может кому пригодится.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE PROCEDURE [dbo].[usp_CreateUser]
@Login NVARCHAR(50), -- Логин пользователя
@Password NVARCHAR(50), -- Пароль пользователя
@IsAdmin BIT, -- признак прав администратора
@IsUser BIT -- признак прав простого пользователя
AS
BEGIN
        DECLARE @SQL NVARCHAR(2000) -- декларируем @SQL
        SET @SQL = ' CREATE LOGIN ' + QUOTENAME(@Login) + ' WITH PASSWORD = ' + QUOTENAME(@Password, '''') + ', CHECK_POLICY = OFF ' -- Создаем логин
                         +  ' CREATE USER ' + QUOTENAME(@Login) + ' FOR LOGIN ' + QUOTENAME(@Login)  -- создаем пользователя
                         +  ' IF ' + CONVERT(nvarchar(1),@IsAdmin) + ' = 1  BEGIN EXEC sp_addrolemember "db_owner" ,' + @Login + ' END ' -- если есть права админа  назначаем роль db_owner
                         + '  IF ' + CONVERT(nvarchar(1),@IsUser) + ' = 1 BEGIN EXEC sp_addrolemember "db_datawriter" ,' + @Login  -- если есть права пользователя назначаем роль db_datawriter
                         + ' EXEC sp_addrolemember "db_datareader" ,' + @Login +' END ' -- если есть права пользователя назначаем роль db_datareader
                         + ' IF  (select count (Us.Login) from Users AS Us WHERE Us.Login = '+@Login+') = 0 ' -- если в таблице users в поле Login нет вводимого логина
                         + ' BEGIN
                              INSERT INTO Users(Login,IsAdmin,IsUser) VALUES ('+@Login +','+ CONVERT(nvarchar(1),@IsAdmin)+','+ CONVERT(nvarchar(1),@IsUser)+')' -- вносим в таблицу users логин (поле Login) и булевые значения прав администратора (поле IsAdmin) и пользователя (поле IsUser)
                         + ' END'
        EXECUTE (@SQL) -- выполняем @SQL
END
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2012, 08:45
Помогаю со студенческими работами здесь

Скрипт для создания пользователей в AD через Power shell
Доброго время суток, прошу помощи, нужен скрипт для создания однотипных учетных записей, к примеру, есть неизменяемая часть учетной записи...

Пакетный файл для создания и удаления групп пользователей с чтением параметров из текстового файла
Всем добрый день. У меня возникла проблемка по написанию батника. Он должен создавать и удалять группы пользователей. Название группы и...

Процедура Shell / подсчет количества процессов пользователей.
Написать процедуру Shell,которая: Вводит с терминала некоторое число Всем пользователям,работающим в данный момент в системе,...

Процедура создания одномерного массива
Заданиие: По сформированному двумерному массиву сформировать одномерный: массив А - составленный из минимальных чётных элементов столбцов...

Процедура создания массива, типа TPicture
Привет всем, встретился с проблемой создания массива картинок, и уже перерыл весь интернэт, и не могу понять что я делаю не так... помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru