PDA

View Full Version : خطای این دستور select در چیست؟



ztx4
سه شنبه 12 بهمن 1389, 14:41 عصر
سلام
من وقتی این دستور رو اجرا می کنم :


select str(classcode)+' : '+name+' '+time+'-'+tol as f from class

با این خطا مواجه می شم:


Msg 451, Level 16, State 1, Line 1
Cannot resolve collation conflict for column 1 in SELECT statement.

اینم جدولی هست که دارم:


USE [moin]
GO

/****** Object: Table [dbo].[class] Script Date: 02/01/2011 02:37:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[class](
[classcode] [bigint] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) NOT NULL,
[time] [nvarchar](50) NULL,
[tol] [nvarchar](50) NULL,
[sex] [bit] NULL,
[shahriye] [money] NOT NULL,
[teachercode] [bigint] NULL,
CONSTRAINT [PK_class] PRIMARY KEY CLUSTERED
(
[classcode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[class] WITH CHECK ADD CONSTRAINT [FK_class_teacher] FOREIGN KEY([teachercode])
REFERENCES [dbo].[teacher] ([teachercode])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[class] CHECK CONSTRAINT [FK_class_teacher]
GO


اما این دستورات مشکلی نداره:


select str(classcode)+' : '+name as f from class

select time+'-'+tol as f from class



ممنون می شم راهنمایی کنید
خیلی بهش احتیاج دارم.
درواقع نیازم اینه که اطلاعات مربوط به select اول رو باید در یک رکورد استخراج کنم.
اگر راه دیگه ای هم برای این کار دارید لطفا بفرمایید.
ممنون...

m_omrani
سه شنبه 12 بهمن 1389, 19:15 عصر
به نظرم COLLATION ستون هاتون یکی نیست.
به طور دقیق تر، COLLATION ستون name با COLLATION یکی از ستون های time یا tol.
می تونید از طریق خود Management Studio این رو ببینید.

ztx4
سه شنبه 12 بهمن 1389, 19:33 عصر
به نظرم COLLATION ستون هاتون یکی نیست.
به طور دقیق تر، COLLATION ستون name با COLLATION یکی از ستون های time یا tol.
می تونید از طریق خود Management Studio این رو ببینید.

منظور از collation چیه؟
همون طور که می بینید نوع همه ی ستون ها با هم یکی هست.nvarchar(50)
دلیل عدم تطبیق چیه؟

JavanSoft
سه شنبه 12 بهمن 1389, 23:17 عصر
1) شما از (50)Ncharبراي Timeاستفاده كرديد . دليل آن چيست .؟
2) collation خود DataBase شما چيست ؟

m_omrani
سه شنبه 12 بهمن 1389, 23:18 عصر
ترجمه اش رو نمی دونم دقیقاً چی باید ترجمه کرد. اما COLLATION طبق مستندات SQL مجموعه ای از قوانینه که برای مرتب سازی، حساسیت حروف، و حساسیت لهجه متن و همچنین تحمیل کُد پیج مورد اعمال به دیتاهای رشته ای برای ذخیره سازی در دیتابیس یا بازیابی اونها به کار می ره.

اگه COLLATION ستون هاتون یکی نباشه، SQL Server نمی تونه عمل مقایسه رو انجام بده ولو این که هر دو ستون در یک جدول و هر دو از یک نوع باشن (مثلاً هر دو nvarchar(40) باشن).