Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 带有验证的“插入”存储过程_Sql_Sql Server_Database_Tsql_Stored Procedures - Fatal编程技术网

Sql 带有验证的“插入”存储过程

Sql 带有验证的“插入”存储过程,sql,sql-server,database,tsql,stored-procedures,Sql,Sql Server,Database,Tsql,Stored Procedures,我试图创建一个存储过程,在该过程中,我将在数据库中的office表中插入一个新的office 我想首先检查我试图创建的办公室是否已经存在 这里有一些代码,我已经从那里得到了目前为止,但我不能完全得到它的权利。如果您能提供一些意见,我将不胜感激 CREATE PROCEDURE stored_proc_new_office AS BEGIN DECLARE @office_id int SELECT @office_id = (SELECT office_id FROM

我试图创建一个存储过程,在该过程中,我将在数据库中的office表中插入一个新的office

我想首先检查我试图创建的办公室是否已经存在

这里有一些代码,我已经从那里得到了目前为止,但我不能完全得到它的权利。如果您能提供一些意见,我将不胜感激

CREATE PROCEDURE stored_proc_new_office
AS 
BEGIN    
    DECLARE @office_id int
    SELECT @office_id = (SELECT office_id FROM inserted)

    IF NOT EXISTS (SELECT 1 FROM OFFICE WHERE office_id = @office_id)
    BEGIN
        ROLLBACK TRANSACTION
        PRINT 'Office already exists.'
    END
END

下面是一个简单的示例,说明如何使用存储过程插入新记录,并进行检查以确保它不存在

创建过程dbo.AddNewOffice @名称nvarchar128 - ... 为其他office详细信息添加参数 ,@NewId int out 像 开始 不计数; 插入dbo.Office[Name]-。。。添加其他列 选择@Name-。。。添加其他参数以匹配上面的列 如果不存在,请从dbo.Office中选择1,其中[Name]=@Name;-。。。为测试唯一性添加任何附加条件 -如果未插入任何内容,则返回一个错误代码,供调用应用程序用于显示对用户有意义的内容 如果@@rowcount=0,则返回99; -将新id返回给呼叫应用程序。 设置@NewId=scope\u identity; 返回0; 终止
存储过程?还是扳机?inserted仅在触发器中可用。并且假定id始终是唯一的,因为它应该由系统生成。我们需要了解您检测重复记录的实际标准,例如OfficeName或类似记录。如果希望在此SP中创建新记录,则需要在使用参数中传递创建新office记录所需的信息。不过,我想这两种方法都可能使用insert。你是说为了验证我需要扳机吗?是的,您是正确的,它应该是办公室名称而不是id。否,您可以创建一个带有验证的SP。。。只是不是你做这件事的方式。您需要查看名为Insert Statements With Parameter的示例,然后在中传递有关新办公室的详细信息,然后在插入之前检查它是否已经存在。