我突然发现,在 SQL Server (2000) 中,任何字段类型值都可能被视为带引号的字符串(在查询或 DML 中)。
问题:这是正常行为还是意外成功的结果?
Example:
CREATE TABLE [Test_table] (
[int_field] [int] NULL ,
[float_field] [float] NULL ,
[date_field] [datetime] NULL ,
[id] [int] NOT NULL
) ON [PRIMARY]
GO
update test_table set int_field = 100, float_field = 10.01, date_field = CAST('2013-11-10' AS DATETIME) where id = 1
update test_table set int_field = '200', float_field = '20.02', date_field = '2014-12-10' where id = '2'
select * from test_table where id in ('1', 2) -- WHY '1' DOES WORK!???
为什么我需要这个?存在将超过 270 个参数作为完整文本(XML 或通过分隔符自定义序列化或类似 Len1+value1+len2+value2+..)发送到一个存储过程的想法,然后解析并提取所有所需值并在UPDATE
语句中使用它们。这个SO 问题。
Q2:某些类型有限制吗?Q3:这是可靠的方式还是CAST
推荐的方式?