0

我正在尝试在数据库 A 中创建一个视图,该视图由数据库 B 中的一个选择填充,并且我遇到了排序规则冲突,更准确地说,它介于(Latin1_General_CI_AS”和“Latin1_General_BIN”之间)。我需要在哪里(在代码中)放置整理?

最好的祝福。

代码在这里:

CREATE VIEW [dbo].[CML_SDG_MENSAL_ESTOQUE]
AS

select  
SUM(dw_fato_faturmes.val_fatur) val_fatur, 
SUM(dw_fato_faturmes.val_receita) val_receita, 
SUM(dw_fato_faturmes.qtd_bonif_item) qtd_bonif_item, 
SUM(dw_fato_faturmes.val_bonif_fatur) val_bonif_fatur,
SUM(dw_fato_faturmes.val_bonif_receita) val_bonif_receita,
SUM(dw_fato_faturmes.val_devol_fatur) val_devol_fatur,
SUM(dw_fato_faturmes.val_devol_receita) val_devol_receita,
DW_DIM_PRODUTO.B1_CODDB B1_CODDB,
dw_fato_faturmes.cod_produto cod_produto, 
SUM(dw_fato_faturmes.qtd_estoque) qtd_estoque, 
SUM(dw_fato_faturmes.qtd_devol) qtd_devol, 
SUM(dw_fato_faturmes.qtd_item) qtd_item, 
SUM(dw_fato_faturmes.qtd_meta) qtd_meta,
SUM(dw_fato_faturmes.qtd_pedido) qtd_pedido,
SUM(dw_fato_faturmes.qtd_item)+
    SUM(dw_fato_faturmes.qtd_bonif_item)+
    SUM(dw_fato_faturmes.qtd_devol) venda_liquida
(SUM(dw_fato_faturmes.qtd_item)
     +SUM(dw_fato_faturmes.qtd_bonif_item)
    +SUM(dw_fato_faturmes.qtd_devol))
    +SUM(dw_fato_faturmes.qtd_pedido) venda___pedido
FROM 
logixbi.dbo.dw_fato_faturmes dw_fato_faturmes, 
logixbi.dbo.DW_DIM_CLIENTE DW_DIM_CLIENTE, 
DW_DIM_EMPRESA DW_DIM_EMPRESA, 
logixbi.dbo.DW_DIM_MARCA DW_DIM_MARCA, 
logixbi.dbo.DW_DIM_PRODUTO DW_DIM_PRODUTO, 
logixbi.dbo.DW_DIM_REPRESENTANTE DW_DIM_REPRESENTANTE

where 
DW_DIM_EMPRESA.SM0_FILIAL=dw_fato_faturmes.filial and
DW_DIM_MARCA.BM_GRUPO=dw_fato_faturmes.grupo and
DW_DIM_PRODUTO.B1_COD=dw_fato_faturmes.cod_produto and
DW_DIM_REPRESENTANTE.A3_COD=dw_fato_faturmes.vendedor and
DW_DIM_CLIENTE.A1_COD=dw_fato_faturmes.cliente and
DW_DIM_CLIENTE.A1_LOJA=dw_fato_faturmes.loja

group by DW_DIM_PRODUTO.B1_CODDB,dw_fato_faturmes.cod_produto
4

4 回答 4

4

为了找到具有 wich 排序规则的列,请使用以下代码段:

SELECT name, collation_name
  FROM sys.columns
  WHERE OBJECT_ID IN (SELECT OBJECT_ID
                        FROM sys.objects
                       WHERE type = 'U'
                         AND name = 'your_table_name'
                      )
    AND name = 'your_column_name'

找到列后,请尝试以下操作:

column_1 COLLATE your_collation = column_2 COLLATE your_collation

最好在全局范围内坚持单一的排序规则。否则你会有问题。这是一个片段,它将为您提供数据库中的所有列,这些列与数据库中的列COLLATION不同

SELECT [TABLE_NAME] = OBJECT_NAME([id]),
       [COLUMN_NAME] = [name],
       [COLLATION_NAME] = collation
  FROM syscolumns
 WHERE collation <> 'your_database_collation_type'
   AND collation IS NOT NULL
   AND OBJECTPROPERTY([id], N'IsUserTable')=1
于 2012-08-23T13:54:45.690 回答
1

放在哪里取决于冲突在哪里。

我建议加入

IE

DW_DIM_EMPRESA.SM0_FILIAL COLLATE Latin1_General_CI_AS =dw_fato_faturmes.filial COLLATE Latin1_General_CI_AS 
于 2012-08-23T13:54:07.653 回答
1

这是由于不同排序规则类型之间的操作而发生的,因此请尝试使用此 for 语句进行比较。

ColumnA = ColumnB collate database_default
于 2015-07-24T06:35:03.667 回答
0

尝试在 where 子句中的所有字符匹配条件中使用它:

colnameA COLLATE Latin1_General_CI_AS = columnnameB COLLATE Latin1_General_CI_AS
于 2012-08-23T13:53:10.097 回答