我将检查约束添加到如下所示。两种使用方式,我都会获得不同的结果。有人可以解释什么会有所不同吗?
ALTER TABLE [dbo].[state] WITH CHECK ADD CONSTRAINT [chk_State_partition_42] CHECK ([Code]>='42' AND [Code]<'43')
ALTER TABLE dbo.State WITH CHECK ADD CONSTRAINT [chk_state_partition_42] CHECK ([code]>=42 AND [code]<43)
- 实际上在第二查询之上是遵循动态SQL代码的结果声明@code varchar(2)='42' ,@sqlstr varchar(max) -set @sqlstr ='Alter Table dbo.State with Check添加约束[CHK_STATE_PARTITION _' @apistate '] check([code]> =' @apistate 'and [code]&lt;' cast(cast(cast)(@code(@code)作为int) 1作为varchar(2)) ')'' 选择@sqlstr
sql Server能够施放某些类型,隐含地在此处找到详细信息
这取决于列Code
的数据类型。是否是数字(例如INT
),发动机会隐式地将42
投射到数字上。如果不是,则将在字符串级别上进行比较。
您必须意识到,字母数字比较可能是 - 可能无法正常工作。在这种情况下,9
高于42
...
更新
您刚刚添加,您的code
列的数据类型为VARCHAR ...如果您期望对数字进行比较,则使用QOUTES >'42'
的代码危险错误!