Этот запрос отличается от того, что вы спрашивали:
Это два способа получить пользователя:
"MATCH (u: USER) WHERE u.id =" + id + "RETURN u"
blockquote>
- Параметризовано:
"MATCH ( u: USER) WHERE u.id = {id} RETURN u "
blockquote>Вы можете проверить, передав значение id в обоих запросах, например:
1 ИЛИ 1 = 1
blockquote>Или худшее значение для id , например:
1 ИЛИ 1 = 1
blockquote>
[ 110] С вами
УДАЛИТЬ УДАЛИТЬ u
Из здесь
If not Exists (select loginname from master.dbo.syslogins
where name = @loginName and dbname = 'PUBS')
Begin
Select @SqlStatement = 'CREATE LOGIN ' + QUOTENAME(@loginName) + '
FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]')
EXEC sp_executesql @SqlStatement
End
Чтобы к hande конфликту имен между логинами, ролями, пользователи и т.д. необходимо проверить type
столбец согласно документация Microsoft sys.database_principals
для обработки специального chacters в именах пользователей и т.д., используйте N'<name>'
и [<name>]
соответственно.
USE MASTER
IF NOT EXISTS (SELECT 1 FROM master.sys.server_principals WHERE
[name] = N'<loginname>' and [type] IN ('C','E', 'G', 'K', 'S', 'U'))
CREATE LOGIN [<loginname>] <further parameters>
USE <databasename>
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE
[name] = N'<username>' and [type] IN ('C','E', 'G', 'K', 'S', 'U'))
CREATE USER [<username>] FOR LOGIN [<loginname>]
USE <databasename>
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE
[name] = N'<rolename>' and Type = 'R')
CREATE ROLE [<rolename>]
USE <databasename>
EXEC sp_addrolemember N'<rolename>', N'<username>'
USE <databasename>
GRANT SELECT ON [<tablename>] TO [<rolename>]
GRANT UPDATE ON [<tablename>] ([<columnname>]) TO [<rolename>]
GRANT EXECUTE ON [<procedurename>] TO [<rolename>]
В качестве незначительного дополнения к этому потоку, как правило, вам следует избегать использования представлений, которые начинаются с sys.sys *, поскольку Microsoft включает их только для обратной совместимости. Для вашего кода вам, вероятно, следует использовать sys.server_principals. Предполагается, что вы используете SQL 2005 или выше.
Попробуйте следующее (замените 'user' фактическим именем входа):
IF NOT EXISTS(
SELECT name
FROM [master].[sys].[syslogins]
WHERE NAME = 'user')
BEGIN
--create login here
END
Это работает на SQL Server 2000.
use master
select count(*) From sysxlogins WHERE NAME = 'myUsername'
на SQL 2005 измените вторую строку на
select count(*) From syslogins WHERE NAME = 'myUsername'
Я не уверен насчет SQL 2008, но предполагаю, что это будет то же самое, что и SQL 2005, а если нет, это должно дать вам представление о том, с чего начать поиск.
Способ сделать это в SQL Server 2005 и более поздних версиях без использования устаревшего вида syslogins:
IF NOT EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'LoginName')
BEGIN
CREATE LOGIN [LoginName] WITH PASSWORD = N'password'
END
Вид server_principals используется вместо sql_logins, так как в последнем нет списка логинов Windows.
Если перед их созданием необходимо проверить наличие пользователя в определенной базе данных, то это можно сделать:
USE your_db_name
IF NOT EXISTS
(SELECT name
FROM sys.database_principals
WHERE name = 'Bob')
BEGIN
CREATE USER [Bob] FOR LOGIN [Bob]
END