2017-05-16 61 views
0

我的服务器是Latin1_General_CI_ASSQL Server的子查询排序规则冲突

我的数据库是Latin1_General_CI_AS

我的表是Latin1_General_CI_AS

我的专栏是Latin1_General_CI_AS

我的查询是:

SELECT Product, [Bradken Part Number], Drawing, 
    (SELECT TOP (1) Location FROM dbo.Events_Table AS e WHERE 
    (Product = dbo.JobSummaryView1.Product) 
    ORDER BY DateTime1 DESC) AS Expr1 
FROM dbo.JobSummaryView1 

但是,当我运行此查询它表示SQL_Latin1_General_CP1_CI_AS和Latin1_General_CI_AS之间存在排序规则混淆!

这怎么可能? 我猜这个子查询正在使用SQL_Latin1_General_CP1_CI_AS,但为什么?

我知道我可以通过在SELECT中指定排序规则来修复它,但我宁愿防止它发生。

我正在使用SQL Server Express 2014

+0

即使是tempdb系统数据库也表示它是Latin1_General_CI_AS。 – Treva26

+0

好像你的db设计有一些排序不一致。 – jarlh

回答

0

试试这个。

...WHERE fieldname COLLATE DATABASE_DEFAULT = otherfieldname COLLATE DATABASE_DEFAULT 
+0

是的,我知道我可以做到这一点。我的问题是,为什么如果一切都设置为相同的排序规则,我将不得不如此开始? – Treva26

+0

排序和比较字符串时需要使用排序规则。您可以使用此查询来检查表中每列的排序规则:SELECT col.name,col.collat​​ion_name FROM sys.columns col WHERE object_id = OBJECT_ID('YourTableName') –

+0

**来自检查队列** :我可以请求您请您在答案中添加一些上下文。仅有代码的答案很难理解。如果您可以在帖子中添加更多信息,它可以帮助提问者和未来的读者。 – RBT

0

啊对不起我的坏..

正在被加入了查看涉及实际SQL_Latin1_General_CP1_CI_AS

我加校勘这种观点,现在不需要在任何整理了不同的数据库我发布的查询。

对不起:$

0

回答

如果能诊断视图。条件“Product = dbo.JobSummaryView1.Product”必须应用单独的排序规则。

+0

@ treva26请检查。 –