2009-09-09 34 views
3

我有一個區分大小寫的SERVER(SQL_Latin1_General_CP1_CS_AS),但數據庫不區分大小寫(SQL_Latin1_General_CP1_CI_AS)。SQL Server存儲過程區分大小寫?

如果我嘗試在數據庫上創建以下存儲過程,則會出現錯誤「必須聲明標量變量」@test「。」

CREATE PROCEDURE [dbo].[sp_Test] (@TEST int) as 
begin 
    SELECT @test 
end 
GO 

但正如我所說的數據庫本身不區分大小寫。我假設這是有記載的存儲過程遵循服務器的敏感性,但我無法在任何地方找到參考。任何人都可以指出我在哪裏可以找到關於此的一些文檔? (是的,我試過谷歌,但我沒有找到任何東西)

回答

4

你是對的。數據庫歸類不控制變量名稱區分大小寫 - 服務器歸類確實。

任何其他對象名稱(例如表格,視圖,列)都遵循數據庫整理規則。在你的情況下,這意味着案件不敏感,因爲你的數據庫是CI不區分大小寫)。

SQL Server Books Online

COLLATE (Transact-SQL)

標識符的排序規則取決於在它被定義的級別。

  • 實例級別對象的標識符(如登錄名和數據庫名稱)被分配爲實例的默認排序規則。
  • 數據庫中對象的標識符(例如表,視圖和列名稱)被指定爲數據庫的默認排序規則。

    例如,兩個名稱只有大小寫不同的表可能會在具有區分大小寫的排序規則的數據庫中創建,但可能不會在具有不區分大小寫的排序規則的數據庫中創建。有關更多信息,請參閱Database Identifiers

  • 變量標識符,GOTO標籤臨時存儲過程,並臨時表是在服務器實例的默認排序規則。

    當連接上下文與一個數據庫相關聯時,可以創建變量,GOTO標籤,臨時存儲過程和臨時表,然後在上下文切換到另一個數據庫時引用該變量。

可以使用檢查服務器歸類:

SELECT SERVERPROPERTY('collation'); 

SQL_Latin1_General_CP1_CI_AS 
(1 row(s) affected) 

參見

+0

謝謝您的確認。 – Kyle 2009-09-09 16:58:15