PDA

View Full Version : مشکل در upload بانک از طریق script



ClaimAlireza
جمعه 11 اسفند 1385, 21:00 عصر
سلام...
من برای upload بانک به host یک script گرفتم و آن را در محیط بانکم اجرا کردم.تمام قسمت ها به درستی در بانک hhost ایجاد شد ولی با error زیر مواجه شدم:

Msg 446, Level 16, State 9, Procedure aspnet_UsersInRoles_AddUsersToRoles, Line 45
Cannot resolve collation conflict for equal to operation.
Msg 446, Level 16, State 9, Procedure aspnet_UsersInRoles_RemoveUsersFromRoles, Line 50
Cannot resolve collation conflict for equal to operation.
Msg 208, Level 16, State 11, Line 1
Invalid object name 'dbo.aspnet_UsersInRoles_AddUsersToRoles'.
Msg 208, Level 16, State 11, Line 1
Invalid object name 'dbo.aspnet_UsersInRoles_RemoveUsersFromRoles'.

بدیهی است که storedProcedure های مذبور ایجاد نشده اند

دلیلش چیه؟
در ضمن باید بگم که اجرای این script در حالت local این مشکل را ایجاد نمی کند.
با تشکر....

AminSobati
جمعه 11 اسفند 1385, 21:57 عصر
این خطاها مال دو دستور مختلفه. در اولی شما حتما جایی از علامت تساوی استفاده میکنید که Collationها با هم مطابقت ندارند. در دومی هم که اشاره کردین Object وجود نداره. مشکل دوم روشنه اما برای اولی باید کد رو پست کنین

ClaimAlireza
شنبه 12 اسفند 1385, 22:00 عصر
با تشکر از پاسخ شما...


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER 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



بهتر نیست از بانک backup بگیرم و بعد اونو restore

ClaimAlireza
یک شنبه 13 اسفند 1385, 13:00 عصر
در اولی شما حتما جایی از علامت تساوی استفاده میکنید که Collationها با هم مطابقت ندارند

پس چرا در حالت local مشکلی به وجود نمی آید.

کد های بالا بهم ریخته بود دوباره آنها را گذاشتم



USE [PretendID]
GO
/****** Object: StoredProcedure [dbo].[aspnet_UsersInRoles_AddUsersToRoles] Script Date: 03/03/2007 23:36:07 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATEPROCEDURE [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 WHERELOWER(@ApplicationName)= LoweredApplicationName
IF(@AppId ISNULL)
RETURN(2)
DECLARE @TranStarted bit
SET @TranStarted = 0
IF(@@TRANCOUNT= 0 )
BEGIN
BEGINTRANSACTION
SET @TranStarted = 1
END
DECLARE @tbNames table(Namenvarchar(256)NOTNULLPRIMARYKEY)
DECLARE @tbRoles table(RoleId uniqueidentifierNOTNULLPRIMARYKEY)
DECLARE @tbUsers table(UserId uniqueidentifierNOTNULLPRIMARYKEY)
DECLARE @Num int
DECLARE @Pos int
DECLARE @NextPos int
DECLARE @Name nvarchar(256)
SET @Num = 0
SET @Pos = 1

INSERTINTO @tbRoles
SELECT RoleId
FROM dbo.aspnet_Roles ar, @tbNames t
WHERELOWER(t.Name)= ar.LoweredRoleName AND ar.ApplicationId = @AppId
IF(@@ROWCOUNT<> @Num)
BEGIN
SELECTTOP 1 Name
FROM @tbNames
WHERELOWER(Name)NOTIN(SELECT ar.LoweredRoleName FROM dbo.aspnet_Roles ar, @tbRoles r WHERE r.RoleId = ar.RoleId)
IF( @TranStarted = 1 )
ROLLBACKTRANSACTION
RETURN(2)
END
DELETEFROM @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 ISNULL)
SELECT @NextPos =LEN(@UserNames)+ 1
SELECT @Name =RTRIM(LTRIM(SUBSTRING(@UserNames, @Pos, @NextPos - @Pos)))
SELECT @Pos = @NextPos+1
INSERTINTO @tbNames VALUES(@Name)
SET @Num = @Num + 1
END
INSERTINTO @tbUsers
SELECT UserId
FROM dbo.aspnet_Users ar, @tbNames t
WHERELOWER(t.Name)= ar.LoweredUserName AND ar.ApplicationId = @AppId
IF(@@ROWCOUNT<> @Num)
BEGIN
DELETEFROM @tbNames
WHERELOWER(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
INSERTINTO @tbUsers
SELECT UserId
FROM dbo.aspnet_Users au, @tbNames t
WHERELOWER(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
SELECTTOP 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 )
ROLLBACKTRANSACTION
RETURN(3)
END
INSERTINTO dbo.aspnet_UsersInRoles (UserId, RoleId)
SELECT UserId, RoleId
FROM @tbUsers, @tbRoles
IF( @TranStarted = 1 )
COMMITTRANSACTION
RETURN(0)
END

Behrouz_Rad
یک شنبه 13 اسفند 1385, 17:59 عصر
Collate سرور رو با Properties گرفتن از اون پیدا کن و Collate فیلدهایی که در عملیات مقایسه شرکت دارن رو با Collate سرور تنظیم کن و نتیجه رو بگو...

ClaimAlireza
یک شنبه 13 اسفند 1385, 19:37 عصر
سلام.
تماما یکی می باشند.

Behrouz_Rad
دوشنبه 14 اسفند 1385, 10:31 صبح
تماما یکی می باشند.
و همچنان همون خطا رو دریافت می کنی؟

ClaimAlireza
دوشنبه 14 اسفند 1385, 12:01 عصر
سلام............
بله.همینطور است

Behrouz_Rad
دوشنبه 14 اسفند 1385, 13:24 عصر
اگر جایی سوتی نداده باشی و تمامی مراحل کار رو صحیح انجام داده باشی، محاله که همچنان مشکل داشته باشی!

ClaimAlireza
سه شنبه 15 اسفند 1385, 00:25 صبح
بنده حتی با پشتیبانی host هم تماس گرفتم و آنها را در جریان قرار دادم.
حتی script های این دوstor procedure را برای آنها میل کردم ولی پیغام آنها این بود




باسلام و درود خدمت شما

متاسفانه با وجود چندین ساعت درگیری در مورد این موضوع این مشکل حل نشد ! و حتی از روی Query Analiser روی خود این سرور باز هم خطای confilict کالشن را میدهد !!
لطفا stored pro خود را بررسی نمایید .

ClaimAlireza
پنج شنبه 17 اسفند 1385, 19:08 عصر
دوستان عزیز کسی می تونه بگه کجای این script مشکل داره که در حالت local جواب می ده ولی در حالت سرور میزبان جواب نمیده

sm
جمعه 11 خرداد 1386, 22:40 عصر
نمی دونم مشکل دوستمون حل شده یا نه ... اما من هم با همین مشکل درگیر بودم و راه حلش اینه که باید هرکجا که Temp Table تعریف شده برای تمام فیلدهای از نوع char, varchar,nchar , کلا متنی ها Collation را نیز همانجا بعد از تعریف هر فیلد درج نمود.

موفق باشید