View Full Version : conflict between "Arabic_CI_AI" and "SQL_Latin1_General_CP1_CI_AS
mina1363
چهارشنبه 25 شهریور 1388, 15:08 عصر
سلام خدمت دوستان
این error به چه معناست؟
Cannot resolve the collation conflict between "Arabic_CI_AI" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.
من نمیدونم واقعا چرا داره یه همچین ایرادی میگیره؟ کسی میتونه کمکم کنه؟
mojtaba.baghban
چهارشنبه 25 شهریور 1388, 15:16 عصر
چه موقع این error رو میده
mina1363
چهارشنبه 25 شهریور 1388, 15:25 عصر
وقتی که دارم دستی بهش پارامتر پاس میدم برای جستجو این ایراد رو میگیره
قبلا Collation دیتا بیسم از نوع latin بود بعد چون مقادیر فارسی داشتم ذخیره میکردم موقع جستجو چیزی بهم نشون نمیداد وقتی collation ان رو به Arabic تبدیل کردم درست شد همه خروجی ها درست بود و همه چیز درست کار میکرد تا اینکه مجبور شدم همه دستورات داخل storedprocedure ها رو به صورت command در بیارم حالا کلی ایراد پیدا شده یکیش هم همین اینه
به نظرتون باید چکار کنم؟
بهنام بهمنی
چهارشنبه 25 شهریور 1388, 15:37 عصر
شما در هنگام مقايسه بايد داراي collation برابر باشيد براي حل اين موضوع جلوي ستوني که collation آنSQl_la مي باشد تبديل به collation عربي را بصورت زير بنوسيد:
fld1 Collate Arabic_ci_as=fld2
mina1363
جمعه 27 شهریور 1388, 11:42 صبح
سلام دوستان
من فهمیدم در تنها sp که این ایراد گرفته میشه اینه:
@TblName nvarchar(50),
@docnum1 nvarchar(50)=null,
@docnum2 nvarchar(50)=null,
@docdate1 nvarchar(50)=null,
@docdate2 nvarchar(50)=null,
@office nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @command nvarchar(4000)
set @command=
'select d.DocNum as '+''''+'DocNum'+''''+',d.DocDate as '+''''+'DocDate'+''''+',t.TafName as '+''''+'TafName'+''''+',m.MoeName as '+''''+'MoeName'+''''+',k.KolName as '+''''+'KolName'+''''+',d.Debtor as '+''''+'Debtor'+''''+',d.Creditor as '+''''+'Creditor'+''''+' , d.MoeCode as '+''''+'MoeCode'+''''+' from Document_'+@TblName+' d
inner join Kol k
on k.KolCode=d.KolCode
inner join Moein_'+@TblName+' m
on m.MoeCode=d.MoeCode
inner join Tafzili_'+@TblName+' t
on t.TafCode=d.TafCode
where (d.DocNum between '+''''+ @docnum1+''''+' and '+''''+ @docnum2+''''+') and d.OfficeID='+''''+convert(nvarchar(50), @office)+''''+' and(d.DocDate between '+''''+@docdate1+''''+' and '+''''+ @docdate2+''''+')'
EXEC(@command)
و این sp تنها sp است که در آن از inner join استفاده کردم میتونه علت ایرادش همین باشه؟ چه جوری درستش کنم که دیگه این ایراد رو نگیره؟
ممنونم
ASKaffash
دوشنبه 30 شهریور 1388, 07:49 صبح
سلام
بهتراست اول Script جداول Document_XX و Moein_XX و Tafzili_XX را اینجا قرار دهید تا ببینیم Collation ها چگونه است
mina1363
دوشنبه 30 شهریور 1388, 08:15 صبح
سلام
بهتراست اول Script جداول Document_XX و Moein_XX و Tafzili_XX را اینجا قرار دهید تا ببینیم Collation ها چگونه است
این کد مربوط به ایجاد جدولهاست:
DECLARE @command nvarchar(4000)
set @command=
'CREATE TABLE Document_'+@TblName+
'('+
'DocNum int NOT NULL,'+
'DocDate nvarchar(13) NOT NULL,'+
'TafCode nvarchar(50),'+
'MoeCode nvarchar(50) NOT NULL,'+
'KolCode nvarchar(50) NOT NULL,'+
'DocDetails nvarchar(150) NOT NULL,'+
'FacNum nvarchar(50) NULL,'+
'Date nvarchar(13) NULL,'+
'[Value/Count] nvarchar(50) NULL,'+
'UnitPrice nvarchar(50) NULL,'+
'Debtor int NULL,'+
'Creditor int NULL,'+
'UserName nvarchar(50) NULL,'+
'OfficeID int NOT NULL '+
' PRIMARY KEY CLUSTERED ([DocNum],[MoeCode],[KolCode])'+
'WITH (IGNORE_DUP_KEY = OFF)'+
')'
EXEC(@command)
DECLARE @command nvarchar(2000)
set @command=
'CREATE TABLE Moein_'+@TblName+
'('+
'MoeCode nvarchar(50) NOT NULL,'+
'MoeName nvarchar(50) NOT NULL,'+
'KolCode nvarchar(50) NOT NULL,'+
'OfficeID int NOT NULL '+
'PRIMARY KEY CLUSTERED([MoeCode],[KolCode])'+
'WITH(IGNORE_DUP_KEY = OFF)'+
')'
EXEC(@command)
DECLARE @command nvarchar(2000)
set @command=
'CREATE TABLE Tafzili_'+@TblName+
'('+
'TafCode nvarchar(50) NOT NULL,'+
'TafName nvarchar(50) NOT NULL,'+
'MoeCode nvarchar(50) NOT NULL,'+
'OfficeID int NOT NULL '+
'PRIMARY KEY CLUSTERED([TafCode],[MoeCode])'+
'WITH(IGNORE_DUP_KEY = OFF)'+
')'
EXEC(@command)
خوب همه اینها در یک دیتا بیس ایجاد شده اند و collation همه Arabic_CI_AI است پس قاعدتا نباید ایراد بگیره
ASKaffash
سه شنبه 31 شهریور 1388, 08:43 صبح
سلام
منظور پس از اینکه جدول تولید شد Script آن را تهیه کنید مثلا :
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Tafzili_88]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Tafzili_88]
GO
CREATE TABLE [dbo].[Tafzili_88] (
[TafCode] [nvarchar] (50) COLLATE Arabic_CI_AS NOT NULL ,
[TafName] [nvarchar] (50) COLLATE Arabic_CI_AS NOT NULL ,
[MoeCode] [nvarchar] (50) COLLATE Arabic_CI_AS NOT NULL ,
[OfficeID] [int] NOT NULL
) ON [PRIMARY]
GO
mina1363
سه شنبه 31 شهریور 1388, 17:39 عصر
هنوز هم همون error قبل رو میگیره
SaeedEzzati
جمعه 09 مهر 1389, 03:15 صبح
برای هر خطی که از inner join استفاده میکنه باید مشخص کنی که هر کدوم از چه collati استفاده میکنند
inner join Timing
on Preprint.dars_id COLLATE Arabic_CI_AI =Timing.dars_id COLLATE Arabic_CI_AI
SaeedEzzati
جمعه 09 مهر 1389, 03:45 صبح
راه حل بسیار منطقی و بهتر که واسه من جواب داد
اول با ساتفاده از کد پایین collate تک تک جدول ها و فیلدها رو پیدا میکنیم
SELECT name, collation_name
FROM sys.columns
WHERE OBJECT_ID IN ( SELECT OBJECT_ID
FROM sys.objects
WHERE type = 'U'
AND name = 'TestTable')
GO
بعد از این باید همه فیلدها را از نظر collate یکسان کنیم تا مشکلی پیش نیاد
که با استفاده از این کد میشه این کارو کرد
ALTER TABLE TableName ALTER COLUMN CulumnName
varchar(10)COLLATE Arabic_CI_AI NOT NULL
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.