在 sqlserver 的检查约束中使用 C1 >"42"和 C1>42 有什么区别

  • 本文关键字:C1 sqlserver 区别 约束 sql-server
  • 更新时间 :
  • 英文 :


我将检查约束添加到如下所示。两种使用方式,我都会获得不同的结果。有人可以解释什么会有所不同吗?

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'的代码危险错误!

最新更新