2010-12-03 64 views
0

在我的SQL Server 2K數據庫表中有一個varchar zipcode字段,它在遇到數字連字符的郵政編碼時恰好輸出不正確的郵政編碼字符長度。例如,對於像ABC12-1234這樣的值,它會發出正確的長度,即10,但是當郵政編碼像21345-5這樣的東西時,它的長度是5而不是7.我想知道如何避免這種隱含的不必要的類型轉換。有任何想法嗎?在SQL Server 2000中觀察到的隱式類型轉換

+0

你是如何得到這個長度值的? – 2010-12-03 06:25:22

回答

0

我似乎無法重現這個 - 這個片段完美的作品SQL Server 2000上:

CREATE TABLE ZipCodeTest(ID INT IDENTITY PRIMARY KEY, ZipCode VARCHAR(20)) 

INSERT INTO dbo.ZipCodeTest(ZipCode) VALUES('ABC12-1234') 
INSERT INTO dbo.ZipCodeTest(ZipCode) VALUES('21345-5') 
INSERT INTO dbo.ZipCodeTest(ZipCode) VALUES('ABC') 
INSERT INTO dbo.ZipCodeTest(ZipCode) VALUES('32144') 

然後我做一個SELECT該表:

SELECT 
    ID, ZipCode, LEN(ZipCode) 
FROM 
    ZipCodeTest 

,並獲得以下輸出:

ID ZipCode  LEN   
1 ABC12-1234 10 
2 21345-5  7 
3 ABC   3 
4 32144   5 

你 「的問題的情況下」(與ID = 2)示出了LEN(ZipCode) = 7如預期。

,你能否告訴我們

  • 你的表結構
  • 返回錯誤的長度信息SELECT語句?
2

所以你的抱怨是,如果有人

INSERT INTO YourTable(ZipCode) VALUES(21345-5) 

即它們忽略了報價,將得到視爲

INSERT INTO YourTable(ZipCode) VALUES(21340) 

,你想這是避免和提高一個錯誤,因爲從intvarchar

這種嚴格的行爲是不可能在任何版本的SQL Server呢。 Though it is a moderately highly voted request on the connect site.

必須在您的語言環境中的所有郵編包含-字符?如果是這樣,你可以用檢查約束強制執行這個方面,否則你只需要在插入語句中小心。

無論如何,來自應用程序的任何插入都應該參數化爲正確的類型,所以我認爲這隻適用於手動插入語句?