2012-05-03 132 views
2

我使用的數據庫具有French_CI_AS排序規則(CI應代表區分大小寫),但無論如何都區分大小寫。我試圖理解爲什麼。SQL Server列名區分大小寫

我聲明這個的原因是,帶有'GIVEN'案例設置的批量插入失敗,但他們成功與另一個'給定'案例設置。

例如:

  • INSERT INTO SomeTable([GIVEN],[COLNAME]) VALUES ("value1", "value2")失敗,但
  • INSERT INTO SomeTable([Given],[ColName]) VALUES ("value1", "value2")作品。

編輯 剛看到這一點:

http://msdn.microsoft.com/en-us/library/ms190920.aspx

因此,這意味着它應該可以改變列的排序規則,而不清空所有數據和重建相關的表?

+0

我想你需要用一個簡單的(2列)例子來說明什麼可行,什麼失敗了。我認爲你可能會說INSERT INTO SomeTable([GIVEN],[COLNAME])VALUES(...)'失敗,但是INSERT INTO SomeTable([Given],[ColName])VALUES(...)'起作用。如果是這樣,那麼進入分隔標識符(通常區分大小寫)和歸類(這個區分大小寫不敏感)之間交互的非常微妙的區域。 –

+0

@JonathanLeffler:你的例子與我的問題完全相關。 –

+0

您需要區分表中存儲的內容(數據)和存儲在系統目錄(元數據)中的名稱。如果如您所示,問題出在列名(而不是數據本身)上,那麼您需要研究分隔時數據庫中的SQL列名是否區分大小寫。它也可能取決於如何編寫CREATE TABLE語句(是否在那裏分隔的名稱?)。通常,SQL對列名和表名不區分大小寫;你可以寫入'INSERT INTO SoMeTaBlE(GiVeN,cOlNaMe)VALUES(「v1」,「v2」)',如果這些名字沒有被分隔,那就沒關係。 –

回答

0

檢查表定義中的列的排序規則以及tempdb數據庫的排序規則(即服務器排序規則)。它們可能與您的數據庫整理不同。

+0

你會有任何機會提供一個緊湊的方式做這個問題的查詢嗎? (試圖像任何優秀的開發人員一樣懶惰)) –

+0

@SkippyFastol:參見http://msdn.microsoft.com/en-us/library/ms175835.aspx –

0

列名區分大小寫的事實意味着MASTER數據庫是使用區分大小寫的排序規則創建的。

在我剛做了,導致我調查這種情況下,有人進入

Latin1_C 小號 _A ,而不是Latin1_C _A 小號

當設置SQL服務器。

0

鑑於信息這關鍵部分(即在關於這個問題的評論,而不是實際問題):

其實我使用微軟的.Net的批量插入方法,所以我不t確實知道它發送給DB服務器的確切查詢。

是非常有意義的列名被視爲區分大小寫,即使在不區分大小寫的數據庫,因爲這是怎麼SqlBulkCopy類作品。請參閱Column mappings in SqlBulkCopy are case sensitive

相關問題