Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 MS SQL 2008: Cannot resolve the collation conflict  [new]
Bogdan1024
Member

Откуда: Киев
Сообщений: 558
Пытаюсь выполнить этот SQL:
CREATE PROCEDURE [dbo].[aspnet_UsersInRoles_AddUsersToRoles]
	@ApplicationName  nvarchar(256),
	@UserNames		  nvarchar(4000),
	@RoleNames		  nvarchar(4000),
	@CurrentTimeUtc   datetime
AS
BEGIN
	DECLARE @AppId uniqueidentifier
	SELECT  @AppId = NULL
	SELECT  @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
	IF (@AppId IS NULL)
		RETURN(2)
	DECLARE @TranStarted   bit
	SET @TranStarted = 0

	IF( @@TRANCOUNT = 0 )
	BEGIN
		BEGIN TRANSACTION
		SET @TranStarted = 1
	END

	DECLARE @tbNames	table(Name nvarchar(256) NOT NULL PRIMARY KEY)
	DECLARE @tbRoles	table(RoleId uniqueidentifier NOT NULL PRIMARY KEY)
	DECLARE @tbUsers	table(UserId uniqueidentifier NOT NULL PRIMARY KEY)
	DECLARE @Num		int
	DECLARE @Pos		int
	DECLARE @NextPos	int
	DECLARE @Name		nvarchar(256)

	SET @Num = 0
	SET @Pos = 1
	WHILE(@Pos <= LEN(@RoleNames))
	BEGIN
		SELECT @NextPos = CHARINDEX(N',', @RoleNames,  @Pos)
		IF (@NextPos = 0 OR @NextPos IS NULL)
			SELECT @NextPos = LEN(@RoleNames) + 1
		SELECT @Name = RTRIM(LTRIM(SUBSTRING(@RoleNames, @Pos, @NextPos - @Pos)))
		SELECT @Pos = @NextPos+1

		INSERT INTO @tbNames VALUES (@Name)
		SET @Num = @Num + 1
	END

	INSERT INTO @tbRoles
	  SELECT RoleId
	  FROM   dbo.aspnet_Roles ar, @tbNames t
	  WHERE  LOWER(t.Name) = ar.LoweredRoleName AND ar.ApplicationId = @AppId

	IF (@@ROWCOUNT <> @Num)
	BEGIN
		SELECT TOP 1 Name
		FROM   @tbNames
		WHERE  LOWER(Name) NOT IN (SELECT ar.LoweredRoleName FROM dbo.aspnet_Roles ar,  @tbRoles r WHERE r.RoleId = ar.RoleId)
		IF( @TranStarted = 1 )
			ROLLBACK TRANSACTION
		RETURN(2)
	END

	DELETE FROM @tbNames WHERE 1=1
	SET @Num = 0
	SET @Pos = 1

	WHILE(@Pos <= LEN(@UserNames))
	BEGIN
		SELECT @NextPos = CHARINDEX(N',', @UserNames,  @Pos)
		IF (@NextPos = 0 OR @NextPos IS NULL)
			SELECT @NextPos = LEN(@UserNames) + 1
		SELECT @Name = RTRIM(LTRIM(SUBSTRING(@UserNames, @Pos, @NextPos - @Pos)))
		SELECT @Pos = @NextPos+1

		INSERT INTO @tbNames VALUES (@Name)
		SET @Num = @Num + 1
	END

	INSERT INTO @tbUsers
	  SELECT UserId
	  FROM   dbo.aspnet_Users ar, @tbNames t
	  WHERE  LOWER(t.Name) = ar.LoweredUserName AND ar.ApplicationId = @AppId

	IF (@@ROWCOUNT <> @Num)
	BEGIN
		DELETE FROM @tbNames
		WHERE LOWER(Name) IN (SELECT LoweredUserName FROM dbo.aspnet_Users au,  @tbUsers u WHERE au.UserId = u.UserId)

		INSERT dbo.aspnet_Users (ApplicationId, UserId, UserName, LoweredUserName, IsAnonymous, LastActivityDate)
		  SELECT @AppId, NEWID(), Name, LOWER(Name), 0, @CurrentTimeUtc
		  FROM   @tbNames

		INSERT INTO @tbUsers
		  SELECT  UserId
		  FROM	dbo.aspnet_Users au, @tbNames t
		  WHERE   LOWER(t.Name) = au.LoweredUserName AND au.ApplicationId = @AppId
	END

	IF (EXISTS (SELECT * FROM dbo.aspnet_UsersInRoles ur, @tbUsers tu, @tbRoles tr WHERE tu.UserId = ur.UserId AND tr.RoleId = ur.RoleId))
	BEGIN
		SELECT TOP 1 UserName, RoleName
		FROM		 dbo.aspnet_UsersInRoles ur, @tbUsers tu, @tbRoles tr, aspnet_Users u, aspnet_Roles r
		WHERE		u.UserId = tu.UserId AND r.RoleId = tr.RoleId AND tu.UserId = ur.UserId AND tr.RoleId = ur.RoleId

		IF( @TranStarted = 1 )
			ROLLBACK TRANSACTION
		RETURN(3)
	END

	INSERT INTO dbo.aspnet_UsersInRoles (UserId, RoleId)
	SELECT UserId, RoleId
	FROM @tbUsers, @tbRoles

	IF( @TranStarted = 1 )
		COMMIT TRANSACTION
	RETURN(0)
END  
Кидает ошибки:
Cannot resolve the collation conflict between "Cyrillic_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation. Cannot resolve the collation conflict between "Cyrillic_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation. Cannot resolve the collation conflict between "Cyrillic_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation. Cannot resolve the collation conflict between "Cyrillic_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation. Cannot resolve the collation conflict between "Cyrillic_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.
Что не так? Почему ошибка кидается? Как её устранить?
14 июн 09, 18:40    [7297687]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3248
Скорее всего потому, что в вашей базе и в базе TempDB разные дефолтные коллейшны.
Исправить - явно указывать COLLATE при сравнении строковых величин либо явно прописывать коллейшны строковых полей в объявлениях временных таблиц и табличных переменных.
14 июн 09, 19:21    [7297736]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Bogdan1024
Member

Откуда: Киев
Сообщений: 558
Большое спасибо за совет, он помог и теперь всё работает :)
14 июн 09, 19:58    [7297817]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Точно такая же проблема поменял Collate все равно не помогает :(

--------------------------------------
Starting execution of InstallRoles.SQL
--------------------------------------
Msg 468, Level 16, State 9, Procedure aspnet_UsersInRoles_AddUsersToRoles, Line 48
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Msg 468, Level 16, State 9, Procedure aspnet_UsersInRoles_AddUsersToRoles, Line 52
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Msg 468, Level 16, State 9, Procedure aspnet_UsersInRoles_RemoveUsersFromRoles, Line 53
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Msg 468, Level 16, State 9, Procedure aspnet_UsersInRoles_RemoveUsersFromRoles, Line 58
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.

(1 row(s) affected)

(1 row(s) affected)
Msg 15151, Level 16, State 1, Line 30
Cannot find the object 'aspnet_UsersInRoles_AddUsersToRoles', because it does not exist or you do not have permission.
Msg 15151, Level 16, State 1, Line 31
Cannot find the object 'aspnet_UsersInRoles_RemoveUsersFromRoles', because it does not exist or you do not have permission.
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
---------------------------------------
Completed execution of InstallRoles.SQL
---------------------------------------

Что делать не знаю ((
30 янв 11, 08:41    [10154220]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Glory
Member

Откуда:
Сообщений: 104760
komil
Что делать не знаю ((

Читать ответы -7297736
30 янв 11, 13:34    [10154586]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Во всех БД исправил Collation но все равно такая байда может еще какое нибудь другое решение есть?
30 янв 11, 16:35    [10155024]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Glory
Member

Откуда:
Сообщений: 104760
komil
Во всех БД исправил Collation но все равно такая байда может еще какое нибудь другое решение есть?

И где вы в ответе прочитали, что нужно исправить Collation у базы данных ?
30 янв 11, 17:35    [10155149]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Если я что то не так понял то прошу понять и поддержать. Можно по подробнее?
30 янв 11, 17:43    [10155165]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Glory
Member

Откуда:
Сообщений: 104760
komil
Если я что то не так понял то прошу понять и поддержать. Можно по подробнее?

Вы это предложение точно читали ?
"Исправить - явно указывать COLLATE при сравнении строковых величин либо явно прописывать коллейшны строковых полей в объявлениях временных таблиц и табличных переменных. "
30 янв 11, 18:05    [10155204]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
komil
Если я что то не так понял то прошу понять и поддержать. Можно по подробнее?
Поддерживаю и понимаю.

Чтобы помочь, нужно хоть понять, что вы делали.
30 янв 11, 18:29    [10155254]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
включил <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
а далее показал провайдера
30 янв 11, 19:00    [10155345]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
и просто запускаю aspnet_regsql.exe и получаю следующую ошибку:

+
Исключение:
Во время выполнения файла SQL 'InstallRoles.sql' произошла ошибка. Номер ошибки SQL - 468, а сообщение SqlException: Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.

----------------------------------------
Подробности сбоя
----------------------------------------

SQL Server:
База данных: [AzDAS]
Загружен файл SQL:
InstallRoles.sql

Сбой команд:

DECLARE @ver int
DECLARE @version nchar(100)
DECLARE @dot int
DECLARE @hyphen int
DECLARE @SqlToExec nchar(4000)

SELECT @ver = 7
SELECT @version = @@Version
SELECT @hyphen = CHARINDEX(N' - ', @version)
IF (NOT(@hyphen IS NULL) AND @hyphen > 0)
BEGIN
SELECT @hyphen = @hyphen + 3
SELECT @dot = CHARINDEX(N'.', @version, @hyphen)
IF (NOT(@dot IS NULL) AND @dot > @hyphen)
BEGIN
SELECT @version = SUBSTRING(@version, @hyphen, @dot - @hyphen)
SELECT @ver = CONVERT(int, @version)
END
END

IF (@ver > 7)
SELECT @SqlToExec = N'
CREATE PROCEDURE dbo.aspnet_UsersInRoles_AddUsersToRoles
@ApplicationName nvarchar(256),
@UserNames nvarchar(4000),
@RoleNames nvarchar(4000),
@CurrentTimeUtc datetime
AS
BEGIN
DECLARE @AppId uniqueidentifier
SELECT @AppId = NULL
SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@AppId IS NULL)
RETURN(2)
DECLARE @TranStarted bit
SET @TranStarted = 0

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END

DECLARE @tbNames table(Name nvarchar(256) NOT NULL PRIMARY KEY)
DECLARE @tbRoles table(RoleId uniqueidentifier NOT NULL PRIMARY KEY)
DECLARE @tbUsers table(UserId uniqueidentifier NOT NULL PRIMARY KEY)
DECLARE @Num int
DECLARE @Pos int
DECLARE @NextPos int
DECLARE @Name nvarchar(256)

SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@RoleNames))
BEGIN
SELECT @NextPos = CHARINDEX(N'','', @RoleNames, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@RoleNames) + 1
SELECT @Name = RTRIM(LTRIM(SUBSTRING(@RoleNames, @Pos, @NextPos - @Pos)))
SELECT @Pos = @NextPos+1

INSERT INTO @tbNames VALUES (@Name)
SET @Num = @Num + 1
END

INSERT INTO @tbRoles
SELECT RoleId
FROM dbo.aspnet_Roles ar, @tbNames t
WHERE LOWER(t.Name) = ar.LoweredRoleName AND ar.ApplicationId = @AppId

IF (@@ROWCOUNT <> @Num)
BEGIN
SELECT TOP 1 Name
FROM @tbNames
WHERE LOWER(Name) NOT IN (SELECT ar.LoweredRoleName FROM dbo.aspnet_Roles ar, @tbRoles r WHERE r.RoleId = ar.RoleId)
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(2)
END

DELETE FROM @tbNames WHERE 1=1
SET @Num = 0
SET @Pos = 1

WHILE(@Pos <= LEN(@UserNames))
BEGIN
SELECT @NextPos = CHARINDEX(N'','', @UserNames, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@UserNames) + 1
SELECT @Name = RTRIM(LTRIM(SUBSTRING(@UserNames, @Pos, @NextPos - @Pos)))
SELECT @Pos = @NextPos+1

INSERT INTO @tbNames VALUES (@Name)
SET @Num = @Num + 1
END

INSERT INTO @tbUsers
SELECT UserId
FROM dbo.aspnet_Users ar, @tbNames t
WHERE LOWER(t.Name) = ar.LoweredUserName AND ar.ApplicationId = @AppId

IF (@@ROWCOUNT <> @Num)
BEGIN
DELETE FROM @tbNames
WHERE LOWER(Name) IN (SELECT LoweredUserName FROM dbo.aspnet_Users au, @tbUsers u WHERE au.UserId = u.UserId)

INSERT dbo.aspnet_Users (ApplicationId, UserId, UserName, LoweredUserName, IsAnonymous, LastActivityDate)
SELECT @AppId, NEWID(), Name, LOWER(Name), 0, @CurrentTimeUtc
FROM @tbNames

INSERT INTO @tbUsers
SELECT UserId
FROM dbo.aspnet_Users au, @tbNames t
WHERE LOWER(t.Name) = au.LoweredUserName AND au.ApplicationId = @AppId
END

IF (EXISTS (SELECT * FROM dbo.aspnet_UsersInRoles ur, @tbUsers tu, @tbRoles tr WHERE tu.UserId = ur.UserId AND tr.RoleId = ur.RoleId))
BEGIN
SELECT TOP 1 UserName, RoleName
FROM dbo.aspnet_UsersInRoles ur, @tbUsers tu, @tbRoles tr, aspnet_Users u, aspnet_Roles r
WHERE u.UserId = tu.UserId AND r.RoleId = tr.RoleId AND tu.UserId = ur.UserId AND tr.RoleId = ur.RoleId

IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(3)
END

INSERT INTO dbo.aspnet_UsersInRoles (UserId, RoleId)
SELECT UserId, RoleId
FROM @tbUsers, @tbRoles

IF( @TranStarted = 1 )
COMMIT TRANSACTION
RETURN(0)
END'
ELSE
SELECT @SqlToExec = N'
CREATE PROCEDURE dbo.aspnet_UsersInRoles_AddUsersToRoles
@ApplicationName nvarchar(256),
@UserNames nvarchar(4000),
@RoleNames nvarchar(4000),
@CurrentTimeUtc datetime
AS
BEGIN
DECLARE @AppId uniqueidentifier
SELECT @AppId = NULL
SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@AppId IS NULL)
RETURN(2)

DECLARE @TranStarted bit
SET @TranStarted = 0
IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END

DECLARE @RoleId uniqueidentifier
DECLARE @UserId uniqueidentifier
DECLARE @UserName nvarchar(256)
DECLARE @RoleName nvarchar(256)

DECLARE @CurrentPosU int
DECLARE @NextPosU int
DECLARE @CurrentPosR int
DECLARE @NextPosR int

SELECT @CurrentPosU = 1

WHILE(@CurrentPosU <= LEN(@UserNames))
BEGIN
SELECT @NextPosU = CHARINDEX(N'','', @UserNames, @CurrentPosU)
IF (@NextPosU = 0 OR @NextPosU IS NULL)
SELECT @NextPosU = LEN(@UserNames) + 1

SELECT @UserName = SUBSTRING(@UserNames, @CurrentPosU, @NextPosU - @CurrentPosU)
SELECT @CurrentPosU = @NextPosU+1

SELECT @CurrentPosR = 1
WHILE(@CurrentPosR <= LEN(@RoleNames))
BEGIN
SELECT @NextPosR = CHARINDEX(N'','', @RoleNames, @CurrentPosR)
IF (@NextPosR = 0 OR @NextPosR IS NULL)
SELECT @NextPosR = LEN(@RoleNames) + 1
SELECT @RoleName = SUBSTRING(@RoleNames, @CurrentPosR, @NextPosR - @CurrentPosR)
SELECT @CurrentPosR = @NextPosR+1
SELECT @RoleId = NULL
SELECT @RoleId = RoleId FROM dbo.aspnet_Roles WHERE LoweredRoleName = LOWER(@RoleName) AND ApplicationId = @AppId
IF (@RoleId IS NULL)
BEGIN
SELECT @RoleName
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(2)
END

SELECT @UserId = NULL
SELECT @UserId = UserId FROM dbo.aspnet_Users WHERE LoweredUserName = LOWER(@UserName) AND ApplicationId = @AppId
IF (@UserId IS NULL)
BEGIN
EXEC dbo.aspnet_Users_CreateUser @AppId, @UserName, 0, @CurrentTimeUtc, @UserId OUTPUT
END

IF (EXISTS(SELECT * FROM dbo.aspnet_UsersInRoles WHERE @UserId = UserId AND @RoleId = RoleId))
BEGIN
SELECT @UserName, @RoleName
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(3)
END
INSERT INTO dbo.aspnet_UsersInRoles (UserId, RoleId) VALUES(@UserId, @RoleId)
END
END
IF( @TranStarted = 1 )
COMMIT TRANSACTION
RETURN(0)
END'

EXEC sp_executesql @SqlToExec

IF (@ver > 7)
SELECT @SqlToExec = N'
CREATE PROCEDURE dbo.aspnet_UsersInRoles_RemoveUsersFromRoles
@ApplicationName nvarchar(256),
@UserNames nvarchar(4000),
@RoleNames nvarchar(4000)
AS
BEGIN
DECLARE @AppId uniqueidentifier
SELECT @AppId = NULL
SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@AppId IS NULL)
RETURN(2)


DECLARE @TranStarted bit
SET @TranStarted = 0

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END

DECLARE @tbNames table(Name nvarchar(256) NOT NULL PRIMARY KEY)
DECLARE @tbRoles table(RoleId uniqueidentifier NOT NULL PRIMARY KEY)
DECLARE @tbUsers table(UserId uniqueidentifier NOT NULL PRIMARY KEY)
DECLARE @Num int
DECLARE @Pos int
DECLARE @NextPos int
DECLARE @Name nvarchar(256)
DECLARE @CountAll int
DECLARE @CountU int
DECLARE @CountR int


SET @Num = 0
SET @Pos = 1
WHILE(@Pos <= LEN(@RoleNames))
BEGIN
SELECT @NextPos = CHARINDEX(N'','', @RoleNames, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@RoleNames) + 1
SELECT @Name = RTRIM(LTRIM(SUBSTRING(@RoleNames, @Pos, @NextPos - @Pos)))
SELECT @Pos = @NextPos+1

INSERT INTO @tbNames VALUES (@Name)
SET @Num = @Num + 1
END

INSERT INTO @tbRoles
SELECT RoleId
FROM dbo.aspnet_Roles ar, @tbNames t
WHERE LOWER(t.Name) = ar.LoweredRoleName AND ar.ApplicationId = @AppId
SELECT @CountR = @@ROWCOUNT

IF (@CountR <> @Num)
BEGIN
SELECT TOP 1 N'''', Name
FROM @tbNames
WHERE LOWER(Name) NOT IN (SELECT ar.LoweredRoleName FROM dbo.aspnet_Roles ar, @tbRoles r WHERE r.RoleId = ar.RoleId)
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(2)
END


DELETE FROM @tbNames WHERE 1=1
SET @Num = 0
SET @Pos = 1


WHILE(@Pos <= LEN(@UserNames))
BEGIN
SELECT @NextPos = CHARINDEX(N'','', @UserNames, @Pos)
IF (@NextPos = 0 OR @NextPos IS NULL)
SELECT @NextPos = LEN(@UserNames) + 1
SELECT @Name = RTRIM(LTRIM(SUBSTRING(@UserNames, @Pos, @NextPos - @Pos)))
SELECT @Pos = @NextPos+1

INSERT INTO @tbNames VALUES (@Name)
SET @Num = @Num + 1
END

INSERT INTO @tbUsers
SELECT UserId
FROM dbo.aspnet_Users ar, @tbNames t
WHERE LOWER(t.Name) = ar.LoweredUserName AND ar.ApplicationId = @AppId

SELECT @CountU = @@ROWCOUNT
IF (@CountU <> @Num)
BEGIN
SELECT TOP 1 Name, N''''
FROM @tbNames
WHERE LOWER(Name) NOT IN (SELECT au.LoweredUserName FROM dbo.aspnet_Users au, @tbUsers u WHERE u.UserId = au.UserId)

IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(1)
END

SELECT @CountAll = COUNT(*)
FROM dbo.aspnet_UsersInRoles ur, @tbUsers u, @tbRoles r
WHERE ur.UserId = u.UserId AND ur.RoleId = r.RoleId

IF (@CountAll <> @CountU * @CountR)
BEGIN
SELECT TOP 1 UserName, RoleName
FROM @tbUsers tu, @tbRoles tr, dbo.aspnet_Users u, dbo.aspnet_Roles r
WHERE u.UserId = tu.UserId AND r.RoleId = tr.RoleId AND
tu.UserId NOT IN (SELECT ur.UserId FROM dbo.aspnet_UsersInRoles ur WHERE ur.RoleId = tr.RoleId) AND
tr.RoleId NOT IN (SELECT ur.RoleId FROM dbo.aspnet_UsersInRoles ur WHERE ur.UserId = tu.UserId)
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(3)
END

DELETE FROM dbo.aspnet_UsersInRoles
WHERE UserId IN (SELECT UserId FROM @tbUsers)
AND RoleId IN (SELECT RoleId FROM @tbRoles)
IF( @TranStarted = 1 )
COMMIT TRANSACTION
RETURN(0)
END
'
ELSE
SELECT @SqlToExec = N'
CREATE PROCEDURE dbo.aspnet_UsersInRoles_RemoveUsersFromRoles
@ApplicationName nvarchar(256),
@UserNames nvarchar(4000),
@RoleNames nvarchar(4000)
AS
BEGIN
DECLARE @AppId uniqueidentifier
SELECT @AppId = NULL
SELECT @AppId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@AppId IS NULL)
RETURN(2)


DECLARE @TranStarted bit
SET @TranStarted = 0

IF( @@TRANCOUNT = 0 )
BEGIN
BEGIN TRANSACTION
SET @TranStarted = 1
END

DECLARE @RoleId uniqueidentifier
DECLARE @UserId uniqueidentifier
DECLARE @UserName nvarchar(256)
DECLARE @RoleName nvarchar(256)

DECLARE @CurrentPosU int
DECLARE @NextPosU int
DECLARE @CurrentPosR int
DECLARE @NextPosR int

SELECT @CurrentPosU = 1

WHILE(@CurrentPosU <= LEN(@UserNames))
BEGIN
SELECT @NextPosU = CHARINDEX(N'','', @UserNames, @CurrentPosU)
IF (@NextPosU = 0 OR @NextPosU IS NULL)
SELECT @NextPosU = LEN(@UserNames)+1
SELECT @UserName = SUBSTRING(@UserNames, @CurrentPosU, @NextPosU - @CurrentPosU)
SELECT @CurrentPosU = @NextPosU+1

SELECT @CurrentPosR = 1
WHILE(@CurrentPosR <= LEN(@RoleNames))
BEGIN
SELECT @NextPosR = CHARINDEX(N'','', @RoleNames, @CurrentPosR)
IF (@NextPosR = 0 OR @NextPosR IS NULL)
SELECT @NextPosR = LEN(@RoleNames)+1
SELECT @RoleName = SUBSTRING(@RoleNames, @CurrentPosR, @NextPosR - @CurrentPosR)
SELECT @CurrentPosR = @NextPosR+1

SELECT @RoleId = NULL
SELECT @RoleId = RoleId FROM dbo.aspnet_Roles WHERE LoweredRoleName = LOWER(@RoleName) AND ApplicationId = @AppId
IF (@RoleId IS NULL)
BEGIN
SELECT N'''', @RoleName
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(2)
END

SELECT @UserId = NULL
SELECT @UserId = UserId FROM dbo.aspnet_Users WHERE LoweredUserName = LOWER(@UserName) AND ApplicationId = @AppId
IF (@UserId IS NULL)
BEGIN
SELECT @UserName, N''''
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(1)
END

IF (NOT(EXISTS(SELECT * FROM dbo.aspnet_UsersInRoles WHERE @UserId = UserId AND @RoleId = RoleId)))
BEGIN
SELECT @UserName, @RoleName
IF( @TranStarted = 1 )
ROLLBACK TRANSACTION
RETURN(3)
END
DELETE FROM dbo.aspnet_UsersInRoles WHERE (UserId = @UserId AND RoleId = @RoleId)
END
END
IF( @TranStarted = 1 )
COMMIT TRANSACTION
RETURN(0)
END
'
EXEC sp_executesql @SqlToExec


Исключение SQL:
System.Data.SqlClient.SqlException: Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Cyrillic_General_CI_AS" in the equal to operation.
в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
в System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
в System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
в System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
в System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
в System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
в System.Web.Management.SqlServices.ExecuteFile(String file, String server, String database, String dbFileName, SqlConnection connection, Boolean sessionState, Boolean isInstall, SessionStateType sessionStatetype)


Сообщение было отредактировано: 27 фев 14, 16:44
30 янв 11, 19:02    [10155347]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Glory
Member

Откуда:
Сообщений: 104760
komil
и просто запускаю aspnet_regsql.exe и получаю следующую ошибку:

Что вам по прежнему мешает уже приступить к решению проблемы ?
Уровень ответов на русскоязычных форумах ?
30 янв 11, 19:04    [10155351]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Да в принципе не чего не мешает кроме того что я не вижу решения проблемы. А если уровень рос.форумов не устраивал меня то я обратился бы в другой форум.
30 янв 11, 19:08    [10155362]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Glory
Member

Откуда:
Сообщений: 104760
komil
Да в принципе не чего не мешает кроме того что я не вижу решения проблемы.

Сколько раз нужно повторить предложение

"Исправить - явно указывать COLLATE при сравнении строковых величин либо явно прописывать коллейшны строковых полей в объявлениях временных таблиц и табличных переменных. "

чтобы вы уже видели решение ?
30 янв 11, 19:11    [10155368]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
komil
Да в принципе не чего не мешает кроме того что я не вижу решения проблемы. А если уровень рос.форумов не устраивал меня то я обратился бы в другой форум.
Это ваше приложение или чёжое?

Если ваше, отлаживайте этот код и ищите строку с ошибкой.

Если чужое - обратитесь к разработчикам.

Скорее всего, коллейшен некоторых полей в таблицах не соответствует колелйшену базы данных. Это ошибка создания таблиц в БД.

Или как валиант, коллейшен полей в одних таблицах не соответствует другим, но это менее вероятно.

Можно просто сделать скрипт таблиц в БД и найти там коллейшены, упомянутые в сообщении об ошибке
30 янв 11, 19:29    [10155400]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Приложение можно не мое, я просто хочу включить Roles в ASP.Net и для этого запускаю aspnetregsql но получаю ошибку которую уже привел выше а БД только что ставил и все по стандарту вроде не могу понять почему Collation-ы не могу совпадать. Если Collation не совпадает как вручную сделать это?
30 янв 11, 19:35    [10155416]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
komil
Приложение можно не мое, я просто хочу включить Roles в ASP.Net и для этого запускаю aspnetregsql но получаю ошибку которую уже привел выше а БД только что ставил и все по стандарту вроде не могу понять почему Collation-ы не могу совпадать. Если Collation не совпадает как вручную сделать это?
Очень неконкретно и непонятно

Ставили стороннее приложение инсталятором? Значит, бага в инсталяторе

Ставили сами? значит, неправильно. "все по стандарту" - имеется в виду инструкция производителя? стандарта на установку БД не существует.

Пока вы не напишите ничего корме "я нажал а у меня ошибка", помочь нельзя.

Коллейшен нужно менять на конкретных столбцах конкретной таблицы, из за которой появляется ошибка. Либо через UI SSMS, либо командами.
30 янв 11, 19:39    [10155427]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Да конечно понимаю что слишком мало информации для решения проблем но и особо говорит тут не чего, предлагаю сделать следующее если Вам не трудно alexeyvg подскажите как глобально во всей базе поменять Collation чтобы конфликтов у меня не было? а то объяснять я особо не мастер как показал этот пост :) извините
30 янв 11, 19:46    [10155445]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
George Ru
Member

Откуда:
Сообщений: 80
MS SQL 2005 Cannot resolve the collation conflict

Добрый день, хочу поделиться решением своей проблемы — при написании скрипта происходило сравнение полей из разных таблиц в результате постоянно выскакивала одна и та же ошибка:

Msg 468, Level 16, State 9, Line 2
Cannot resolve the collation conflict between «Cyrillic_General_CI_AS» and «SQL_Latin1_General_CP1251_CI_AS» in the equal to operation.


Решение нашел на просторах интернета и решил оставить на заметку чтобы больше не искать.

После сравнения полей нужно добавить collate Cyrillic_General_CI_AS

SELECT k.*,p.kl_id FROM ##Klient k
LEFT JOIN Product p ON p.kl_id=k.kl_id collate Cyrillic_General_CI_AS
ORDER BY p.kl_id

У меня такой вариант сработал.

Если кому еще помогло рад за Вас.

Источник: http://zametki-admina.ru/ms-sql-2005-cannot-resolve-the-collation-conflict.html
27 фев 14, 16:33    [15641376]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
OffTop

Смотришь на это явление и поражаешься, как Фейман смотрящий на цветок.

George Ru, а вы можете сказать о чём написано во втором посте? 7297736
27 фев 14, 19:18    [15642435]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
George Ru
Member

Откуда:
Сообщений: 80
Mnior, а Вам не кажется, что я об этом уже сказал? 15641376
13 май 14, 14:05    [16010091]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Glory
Member

Откуда:
Сообщений: 104760
George Ru
а Вам не кажется, что я об этом уже сказал? 15641376

А зачем ждали 5 лет то ?
13 май 14, 14:09    [16010107]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
George Ru
Member

Откуда:
Сообщений: 80
Glory, пересчитайте на калькуляторе, пожалуйста, ещё раз Картинка с другого сайта.
13 май 14, 14:17    [16010147]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2008: Cannot resolve the collation conflict  [new]
Glory
Member

Откуда:
Сообщений: 104760
George Ru
Glory, пересчитайте на калькуляторе, пожалуйста, ещё раз Картинка с другого сайта.

Время поста с аналогичным вашему ответом
14 июн 09, 17:21
Время вашего поста
27 фев 14, 14:33

14-9 = 5 - так мне сказал калькулятор
13 май 14, 14:19    [16010166]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить