当前位置: 首页 > 面试题库 >

在使用SQL Server插入/更新之前,如何验证数据?

翟淮晨
2023-03-14
问题内容

我有一个这样定义的表

CREATE TABLE [dbo].[ObjectRelationClauses]
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [RelationId] INT NOT NULL, 
    [OperatorType] NVARCHAR(3) NOT NULL, 
    [LocalPropertyId] INT NOT NULL, 
    [ForeignPropertyId] INT NULL, 
    [ForeignValue] VARCHAR(255) NULL, 
    [ParentClauseId] INT NULL
)

如果ForeignPropertyIdForeignValue列的值都为,我需要能够引发一个错误null,否则我想执行该操作。

这是我尝试过的

CREATE TRIGGER [dbo].[Trigger_ObjectRelationClauses]
    ON [dbo].[ObjectRelationClauses]
    FOR INSERT, UPDATE
    AS
    BEGIN
        SET NoCount ON
        IF(ForeignPropertyId IS NULL AND ForeignValue IS NULL)
        BEGIN
           RAISERROR('Either ForeignPropertyId or ForeignValue must be provided to perform this action!')
        END

    END

但这给了我一个语法错误。也许,我使用的方式RAISERROR是错误的。

我怎样才能正确地添加触发器来验证的数据INSERTUPDATE


问题答案:

这看起来像是检查约束的工作,而不是触发器:

ALTER TABLE [dbo].[ObjectRelationClauses]
ADD CONSTRAINT foreign_chk CHECK 
([ForeignPropertyId] IS NOT NULL OR [ForeignValue] IS NOT NULL);


 类似资料:
  • 本文向大家介绍SQLServer用存储过程实现插入更新数据示例,包括了SQLServer用存储过程实现插入更新数据示例的使用技巧和注意事项,需要的朋友参考一下 实现 1)有相同的数据,直接返回(返回值:0); 2)有主键相同,但是数据不同的数据,进行更新处理(返回值:2); 3)没有数据,进行插入数据处理(返回值:1)。 【创建存储过程】 【执行方式】 返回值0,已经存在相同的 返回值1,插入成功

  • 问题内容: 我正在做,但是我需要更新部分是有条件的,只有在某些额外条件发生变化时才进行更新。 但是,这是不允许的。有什么解决方法吗? 我无法进行INSERT / UPDATE / SELECT的组合,因为这需要对复制进行处理。 问题答案: 我建议您使用IF()来做到这一点。 参考:条件重复键更新与MySQL

  • 问题内容: 我只是想将数据插入到SQL数据库表中,如果已经插入了一些数据,那么我想更新该数据。如何使用Java做到这一点。请帮助我,并提前对英语不好表示抱歉。 问题答案: 只需标识数据集中的 唯一项即可 (例如 ID 或 代码 )。然后通过使用该方法首先尝试执行 SELECT 查询。如果 结果集 是空的,执行 INSERT 别的尝试 UPDATE 细节。

  • 问题内容: 我正在使用SQL Server 2012,并且具有两个结构相同的表。如果表2中还不存在新记录,我想将它们从表1插入表2。 如果它们已经存在,那么我想更新表2中的所有现有记录。 我的表中有大约30列,我想更新所有这些列。 有人可以帮忙吗?我查看了通过互联网发布的各种链接,但完全不了解我的声明的外观。 问题答案: 真的不那么难.... 你需要: 源表(或查询)以提供数据 将其合并到的目标表

  • 问题内容: 在很多情况下,您需要根据某些条件执行INSERT,UPDATE或DELETE语句。我的问题是,对查询性能的影响是否在命令前添加了IF EXISTS。 例子 INSERT或DELETE呢? 问题答案: 我不太确定,但是我得到的印象是,这个问题实际上是关于upsert的,它是以下原子操作: 如果该行同时存在于源和目标中,则为目标。 如果该行仅存在于源中,则该行进入目标;否则,该行进入目标。

  • 我想将行插入到具有唯一的、非自动递增主键的表中。 是否有一个本机SQL函数来计算最后一个键并将其递增,还是必须分两步进行: