TSQL - 如何在插入之前根据不同列中的值检查值?

     2023-05-08     148

关键词:

【中文标题】TSQL - 如何在插入之前根据不同列中的值检查值?【英文标题】:TSQL - How to check a value against a value in a different column before inserting? 【发布时间】:2009-05-02 02:58:45 【问题描述】:

有没有办法实现一个 CHECK 约束来检查同一个表中不同列中的另一个值的值?具体来说,我想在插入行之前确保要插入的“结帐”日期值大于表中的“签入”日期值。

我可能遗漏了一些细节,所以如果是这种情况,请告诉我。

【问题讨论】:

【参考方案1】:

是的,MSSQL Server(和其他)允许CHECK CONSTRAINTS on the table - 这样您就可以比较列:

ALTER TABLE tbl ADD CONSTRAINT chkCheckout_GT_Checkin
    CHECK (Ckeckout > Checkin)

【讨论】:

【参考方案2】:

您可以使用如下检查:

ALTER TABLE dbo.myTable ADD CONSTRAINT CK_myTable_CheckoutGreaterThanCheckin
CHECK (dbo.CheckDates()>1)

然后添加如下函数:

CREATE FUNCTION CheckDates()
RETURNS int
AS 
BEGIN
    DECLARE @retval int
    SET @retval = (SELECT COUNT(*) FROM myTable WHERE checkout > checkin)
    RETURN @retval
END;

这些可能无法按书面说明工作(抱歉,目前无法访问 SQL 引擎。)

或者您可能希望在查询中包含检查,这样当检查失败时您就不必在代码中使用错误处理。

如果您只是希望插入失败,您可以将 where 子句扩展为:

INSERT INTO myTable (checkout) 
VALUES(@checkout) 
WHERE @checkout > @checkin AND IDcolumn = @IDcolumn

如果您想返回某种类型的指示符,表明存在问题,您可以使用类似上面的内容但添加 SELECT @@ROWCOUNT 或者您可以使用提前检查值:

DECLARE @var int
SET @var = (SELECT count(*)
FROM myTable
WHERE @checkout > checkin AND IDcolumn = @IDcolumn)

如果值通过,@var 将等于 1。

【讨论】:

支持扩展的 where 子句!比触发器更明显,更易于管理。【参考方案3】:

您可以尝试使用触发器。

【讨论】:

根据不同列中的值删除重复项

】根据不同列中的值删除重复项【英文标题】:Removeduplicatesbasedonavaluefromadifferentcolumn【发布时间】:2021-01-1023:57:55【问题描述】:在MSVisualStudio中,我有下表1,我想根据PrimIndicator列删除重复的caseNum。如果案例编号有重复的caseNu... 查看详情

在 pandas 中,如何根据一列中的唯一值创建列,然后根据另一列中的值填充它?

】在pandas中,如何根据一列中的唯一值创建列,然后根据另一列中的值填充它?【英文标题】:Inpandas,howdoIcreatecolumnsoutofuniquevaluesinonecolumn,andthenfillitbasedonvaluesinanothercolumn?【发布时间】:2020-09-1000:52:38【问题描述】:我有一个nxn... 查看详情

在插入之前检查 DataGridview 中的值是不是与数据库表/模式兼容

】在插入之前检查DataGridview中的值是不是与数据库表/模式兼容【英文标题】:CheckifvaluesinDataGridviewarecompatiblewithdatabasetable/schemaBEFOREInserting在插入之前检查DataGridview中的值是否与数据库表/模式兼容【发布时间】:2020-03-0606:21:33【... 查看详情

根据另一列中的值从一列中减去值(SQL)

】根据另一列中的值从一列中减去值(SQL)【英文标题】:Subtractvaluesfromonecolumnbasedonvaluesinanother(TSQL)【发布时间】:2021-02-2209:28:29【问题描述】:我有一个表格,我需要根据应用于另一列的条件减去一列中的值。例如,我想用... 查看详情

根据asp GridView列中的值显示图像

】根据aspGridView列中的值显示图像【英文标题】:DisplayimagebasedonavalueinaspGridViewcolumn【发布时间】:2011-06-1905:56:45【问题描述】:我有一个gridview,其中一个模板字段是一个asp图像服务器标签。我想在这个网格视图中显示一个图像... 查看详情

使用不同的表触发检查条件,然后根据结果更改插入行的值

】使用不同的表触发检查条件,然后根据结果更改插入行的值【英文标题】:Triggercheckconditionusingdifferenttable,thenchangevalueofrowbeinginserteddependingonresult【发布时间】:2014-08-2901:54:57【问题描述】:您好,我目前正在制作一个SQL触发... 查看详情

如何将另一行中的值插入列中 - SQL Server

】如何将另一行中的值插入列中-SQLServer【英文标题】:Howtoinsertavaluefromanotherrowintoacolumn-SQLServer【发布时间】:2020-08-0518:35:06【问题描述】:我正在为一个项目编写SQL,我需要根据一些规则更新Soh_Wh_A和Soh_Wh_B。这是table_A:|Code|Wa... 查看详情

如何在代码中的sql表列中插入默认值

】如何在代码中的sql表列中插入默认值【英文标题】:Howtoinsertadefaultvalueinsqltablecolumnincode【发布时间】:2020-02-0606:22:20【问题描述】:我想在列中插入一个类似EasternTimeZone的值,但我没有在列中得到任何值。在下面的代码中,... 查看详情

突出显示 A:B 列中的值相同但 C 列中的值不同的行

】突出显示A:B列中的值相同但C列中的值不同的行【英文标题】:HighlightrowswherethesamevaluesincolumnsA:BbutdifferentvaluesincolumnC【发布时间】:2016-01-0512:11:30【问题描述】:我有4000多行数据需要处理。其中A列代表SKU,B列代表单位,C列代... 查看详情

SQL:根据 B 列中的布尔值更改 SELECT 查询以在 A 列上显示不同的值

...此输出的SQL查询:如果“CROSSDOMAIN”列的值为true?,我将如何调整我的查询以使“SCORE”列的值增加3我想我 查看详情

如何使用 C API 检查 SQLite 列中的值是不是为 NULL?

】如何使用CAPI检查SQLite列中的值是不是为NULL?【英文标题】:HowtocheckavalueinaSQLitecolumnisNULLornotwithCAPI?如何使用CAPI检查SQLite列中的值是否为NULL?【发布时间】:2012-02-1604:50:39【问题描述】:我正在使用带有CAPI的SQLite。在CAPI上,... 查看详情

如何根据另一列中的值减去df中的行

】如何根据另一列中的值减去df中的行【英文标题】:Howtosubtractrowsinadfbasedonavalueinanothercolumn【发布时间】:2018-10-1203:36:02【问题描述】:我正在尝试根据其他列的值计算某些行中的差异。使用下面的示例数据框,我想根据Code列... 查看详情

Oracle SQL:根据在另一个表中给定条件的列中找到的值插入

】OracleSQL:根据在另一个表中给定条件的列中找到的值插入【英文标题】:OracleSQL:Insertbasedonfoundvalueinacolumngivenconditionfromanothertable【发布时间】:2014-05-2115:22:09【问题描述】:我想将我的订单数据合并到一个表中,该表现在位于... 查看详情

Numpy - 如何根据其他列中的二进制值计算列中的值?

】Numpy-如何根据其他列中的二进制值计算列中的值?【英文标题】:Numpy-howtocountvaluesincolumnbasedonbinaryvaluesinothercolumns?【发布时间】:2022-01-1002:18:44【问题描述】:我有一个只有二进制值的2dnumpy数组,我正在尝试根据具有同一行... 查看详情

根据另一列中的值查找列中的常用词

】根据另一列中的值查找列中的常用词【英文标题】:Findingcommonwordsinacolumnbasedonvaluesfromanothercolumn【发布时间】:2021-12-3017:01:27【问题描述】:在具有名为source的列的数据框中,由两个不同的单词列表组成sourcewordsletter_count1list1a... 查看详情

查询以根据特定列中的值将表中的值相互比较,并仅显示差异忽略 Null

】查询以根据特定列中的值将表中的值相互比较,并仅显示差异忽略Null【英文标题】:QuerytoCompareValuesinaTableAgainstEachotherBasedontheValuesinaSpecificColumnandShowOnlyDifferencsIgnoringNulls【发布时间】:2015-05-2614:34:27【问题描述】:我有一个... 查看详情

如何根据 JavaScript 中的值检查对象是不是在数组中?

】如何根据JavaScript中的值检查对象是不是在数组中?【英文标题】:HowtocheckifobjectsareinanarraybasedonavalueinJavaScript?如何根据JavaScript中的值检查对象是否在数组中?【发布时间】:2018-12-0111:39:47【问题描述】:例如,如何根据id来... 查看详情

使用pandas根据两个不同列中的值计算行数(代码片段)

我有这个名为“dem”的数据框:codeCBOSEXO4758NaNF4858AjudantedemotoristaF4958AjudantedemotoristaM5058AjudantedemotoristaM5158BrasadorNaN5258BrasadorM5358BrasadorMFAIXA_IDADEESCOLARIDADE47DE21A30ANOSSuperiorcomplet 查看详情