2014-05-06 13 views
8

Toplu ek kullanarak verileri alan geçici bir tablom var. Ancak, geçici tablodan normal bir tabloya veri güncellemek istediğimde harmanlama problemleri veriyor. Ben böyle bir şey kullanarak bunu çözmek için nasıl biliyorum:Geçici tablo sütununda harmanlamayı düzeltmek için doğru yol TSQL

UPDATE RegularTable 
SET r.Column1 = t.ColumnA 
FROM RegularTable r INNER JOIN #TEMP t ON 
r.Column1 COLLATE DATABASE_DEFAULT = 
t.ColumnA COLLATE DATABASE_DEFAULT 

Ama, katılmak içinde harmanlamak kullanmak gerekmez hemen böylece geçici tabloda harmanlamayı ayarlamak için bir yol var? gibi bir şey:

CREATE TABLE #TEMP 
Column1 varchar(255) COLLATE database_default, 
Column2 varchar(60) 

bu doğru kodlama mı ve masanın başına veya sütun başına bir kez harmanlamayı gerekiyor? Ve harmanlama tabloda ayarlanmışsa, harmanlamayı birleştirmeden hariç tutabilirsiniz?

cevap

11

Tanımladığınız sözdizimini kullanarak temp tablosu tanımında COLLATE database_default'u kullanabilirsiniz ve bu, her bir sütunu veritabanınızla uyumlu hale getirecektir.

Sütun başına açıkça ayarlamanız gerekir. Tablo düzeyinde varsayılan harmanlama yoktur. Veritabanı düzeyinde varsayılan bir harmanlama vardır, ancak tempdb için bu, varsayılan olarak sunucu harmanlaması olan model veritabanının varsayılan harmanlamasına eşittir.

Harmanlamayı tablo sütununa ayarlarsanız, daha önce yaşadığınız gibi bir sorguda da geçersiz kılabilirsiniz.

+0

Teşekkürler @Christian Hayter, böylece her sütun için COLLATE database_default ayarlamam, katmanın artık birleşiminde kullanılmasına gerek yok mu? Sadece meraktan, varsayılan sunucu harmanlama ayarının ne olduğunu görmenin bir yolu var mı? – J3FFK

+0

@ J3FFK: Bu doğru. Geçerli harmanlamayı görüntülemek için, emin olmak için bir T-SQL işlevi olduğundan eminim, ancak normalde Management Studio'da veritabanı özellikleri iletişimini getiriyorum. :-) –

+0

@ J3FFK: db harmanlamasını 'master.sys.databases.collation_name' –

1

Şu anda aynı sorunla karşılaştık. Her temp tablosu birleştirmesine harmanlamayı eklemek yerine temp tablosu oluşturmayı bir tablo değişken bildirimi olarak değiştirdik.