gpt4 book ai didi

数据库服务器。为什么 [几乎] 任何类型的字段值都可以在查询/DML 中被视为带引号的字符串?

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:15 26 4
gpt4 key购买 nike

我突然发现,在 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 Question .

Q2:部分类型有限制吗?Q3:这种可靠的方式还是推荐CAST

最佳答案

如果您检查 CAST and CONVERT主题,你会发现一个方便的表格:

enter image description here

您会注意到,所有其他类型都支持从 charvarchar 进行转换,只有少数需要显式转换.对于某些类型,没有明显的方法来键入该类型的文字,因此允许从字符串进行隐式转换是有意义的。

(但是哦,我如何希望转换为 datetime 需要带有格式代码的显式大小写...)

关于数据库服务器。为什么 [几乎] 任何类型的字段值都可以在查询/DML 中被视为带引号的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15135204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com