【问题标题】:Insert transaction if not exists in SQL Server如果 SQL Server 中不存在则插入事务
【发布时间】:2015-07-06 10:48:09
【问题描述】:

只有当我没有特定列时,我才想在表中插入它是具有不同标题的轨道表,并且我想通过一个过程添加不同的标题存在条件,我不知道在哪里放置values 术语:

BEGIN TRANSACTION [Tran1]
BEGIN TRY

INSERT INTO  [s15guest59].[dbo].[track](track_topic)
values(@par1)
   WHERE NOT EXISTS (SELECT track_topic FROM [track]
                     WHERE track_topic=@par1)
COMMIT TRANSACTION [Tran1]
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION [Tran1]
END CATCH  

GO

我不知道在中间写什么才能让它工作

消息 137,第 15 级,状态 2,第 2 行
必须声明标量变量“@par1”。

【问题讨论】:

    标签: sql sql-server insert transactions procedures


    【解决方案1】:

    如果你打算使用存储过程,你可以创建存储过程:

        CREATE PROCEDURE spAddTrack 
    @trackName VARCHAR(MAX)
    
    AS
    
    If not exists( Select * from [s15guest59].[dbo].[track] where track_topic=@trackName)
    BEGIN
        INSERT INTO  [s15guest59].[dbo].[track](track_topic) VALUES (@trackName)
    END
    

    感谢执行它:

    EXEC spAddTrack 'this is new track'
    

    【讨论】:

    • 但是你如何执行这个..它是存储过程吗?
    • 谢谢你现在能告诉我我的问题是什么吗?
    • 交易怎么样,如果我有交易,那我该怎么写呢?
    • 首先,您必须使用命令 Create procedure name 在 SQL Server 中创建存储过程,并在您的情况下指定输入参数 @trackName .. 然后您可以在SQL 语句中的存储过程主体,例如您的“where”语句。当你strore SP时,你可以用Exec SP_name +参数执行它
    • 这里不需要您的事务,因为无论如何您都是在一批中完成所有这些操作,因此没有什么可回滚的,当您有多个插入、更新和/或删除时使用事务,因此如果其中一个失败你可以回滚全部或部分部分。在link 阅读有关交易的更多信息
    猜你喜欢
    • 2011-09-01
    • 2018-09-17
    • 2020-04-22
    • 2011-07-01
    • 2014-01-25
    • 2012-03-27
    • 2020-08-07
    • 2016-11-07
    相关资源
    最近更新 更多