2012-08-23 66 views
0

我試圖在數據庫A中創建一個視圖,該數據庫由來自數據庫B的選擇填充,並且我有一個歸類衝突,更準確地說,它是介於(Latin1_General_CI_AS 「和」Latin1_General_BIN「)。是的(在代碼中)我需要整理一下?SQL Server排序規則衝突 - 創建視圖

最好的問候。

的代碼是在這裏:

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 
+0

如果一些答案是有用的(一個確實根據您的評論)點擊'ACCEPT'接受答案(http://stackoverflow.com/faq#howtoask)。一旦你達到[15聲望,你可以upvote](http://stackoverflow.com/faq#reputation) – Yaroslav

回答

1

如果把它取決於地方的衝突。

我建議在加入

DW_DIM_EMPRESA.SM0_FILIAL COLLATE Latin1_General_CI_AS =dw_fato_faturmes.filial COLLATE Latin1_General_CI_AS 
+0

謝謝,這是非常有益的,解決了我的問題! – Maturano

0

嘗試使用這個在您的所有字符匹配where子句條件:

colnameA COLLATE Latin1_General_CI_AS = columnnameB COLLATE Latin1_General_CI_AS 
+0

謝謝你,這是非常有益的,解決了我的問題! – Maturano

3

爲了找到至極列有至極整理使用這個片段:

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 

堅持全球單一排序規則會更好。否則你會有問題。下面是一個片段,它會給你你的數據庫中的所有列與數據庫中的

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 
+0

雅羅斯拉夫,我會稍後嘗試你的解決方案,當我有一段時間,順便說一句,非常感謝你的回答! – Maturano

+0

不客氣。我的解決方案與其他解決方案完全相同,我的答案是第二個代碼片段。我只是增加了更多的細節來檢查「COLLATION」問題,因爲如果你在早期階段沒有處理它,這可能是一個問題。 – Yaroslav

1

這是發生比一個不同COLLATION由於操作之間不同的排序規則類型,因此嘗試一下本作的語句進行比較。

ColumnA = ColumnB collate database_default