在我的SQL Server 2K数据库表中有一个varchar zipcode字段,当它遇到数字带连字符的邮政编码时,会输出错误的zipcode字符长度。例如,对于诸如ABC12-1234之类的值,它将发出正确的长度,即10,但是当zipcode类似于21345-5时,它将其长度发送为5而不是7.我想知道如何避免这种隐含的未命名的类型转换。有什么想法吗?
答案 0 :(得分:2)
所以你的抱怨是,如果有人
INSERT INTO YourTable(ZipCode) VALUES(21345-5)
即他们省略了它将被视为
的引号INSERT INTO YourTable(ZipCode) VALUES(21340)
并且您希望避免这种情况并因为从int
转换为varchar
在任何版本的SQL Server中都无法实现此严格行为。 Though it is a moderately highly voted request on the connect site.
您的语言环境中的所有邮政编码是否都必须包含-
个字符?如果是这样,您可以使用检查约束来强制执行此方面,否则您只需要在插入语句中小心操作。
来自您的应用程序的任何插入都应该参数化为正确的类型,所以我认为这只适用于手动插入语句?
答案 1 :(得分: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
。
你能告诉我们吗