Я пытаюсь запустить запрос, чтобы отбросить логины сервера из окон и воссоздать их. Я запустить этот запрос, чтобы уронить логины и он работает отличноКак сопоставить имя sysname в sql-сервере
USE master
SELECT
'IF EXISTS (SELECT * FROM sys.server_principals WHERE name = ' +
'''' + [name] + '''' + ')' +
' BEGIN DROP LOGIN ' + QUOTENAME([name]) + ' END; ' +
'CREATE LOGIN ' + QUOTENAME([name]) + ' FROM WINDOWS; '
FROM sys.server_principals
WHERE type_desc IN ('WINDOWS_GROUP' , 'WINDOWS_LOGIN')
Но следующий запрос
USE master
SELECT
'ALTER LOGIN ' + QUOTENAME([name]) + ' WITH DEFAULT_DATABASE = ' +
spr.default_database_name
+ 'GRANT ' + spe.permission_name + ' to ' + QUOTENAME([name])
+ CASE WHEN spr.default_database_name IS NOT NULL
THEN ' WITH DEFAULT DATABASE = ' + spr.default_database_name
ELSE
''
END
FROM sys.server_principals spr INNER JOIN
sys.server_permissions spe ON spr.principal_id = spe.grantee_principal_id
WHERE spr.type_desc IN ('WINDOWS_GROUP', 'WINDOWS_LOGIN')
возвращается эту ошибку
Cannot resolve collation conflict for column 1 in SELECT statement.
Так что, когда я исследовал этот вопрос он исходит из sysname
столбец default_database_name
Запрос выполнялся, когда я использовал spr.default_database_name COLLATE Latin1_General_CI_AI
Квест с тремя частями ion: Я получил проблему из-за строки или из-за того, что тип данных столбца равен sysname
?. Является ли COLLATE Latin1_General_CI_AI
правильным синтаксисом для этого сценария ?. когда я выполнить этот запрос
SELECT name, description
FROM sys.fn_helpcollations()
Результаты показывают много сортировки для различных языков. Итак, как я получил эту ошибку для полностью английской базы данных.
Edit: Я побежал эти два запроса, чтобы проверить свойство сортировки для базы данных и сервера
SELECT DATABASEPROPERTYEX(N'master', N'Collation')
SELECT SERVERPROPERTY(N'Collation')
и результат в обоих из них был
SQL_Latin1_General_CP1_CI_AS
Я предполагаю, что сортировка базы данных отличается от сортировки сервера. (Это не типично, но это, конечно, не редкость.) Если вы запустите 'SELECT DATABASEPROPERTYEX (N'MyDatabaseName ', N'Collation')' и 'SELECT SERVERPROPERTY (N'Collation ')', каковы ваши результаты? – DeadZone
@DeadZone благодарит за ваш комментарий. Я буду обновлять свой ответ, чтобы включить результаты для этих запросов. – BICube
Если вы запустите 'sp_help [sys.server_principals];' и посмотрите на сортировку столбца 'default_database_name', соответствует ли это? – DeadZone