Sql 带有验证的“插入”存储过程
我试图创建一个存储过程,在该过程中,我将在数据库中的office表中插入一个新的office 我想首先检查我试图创建的办公室是否已经存在 这里有一些代码,我已经从那里得到了目前为止,但我不能完全得到它的权利。如果您能提供一些意见,我将不胜感激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
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的示例,然后在中传递有关新办公室的详细信息,然后在插入之前检查它是否已经存在。