sql-server-2008 - 快速更新插入 Sql server 2008 R2

标签 sql-server-2008 tsql

我正在尝试使用 SP 将记录更新插入一张表中。

CREATE TABLE [dbo].[SHARE_AD_GROUP](
    [SHARE_AD_GROUP_ID] [int] IDENTITY(1,1) NOT NULL,
    [SHARE_ID] [int] NOT NULL,
    [AD_GROUP] [varchar](200) NOT NULL,
    [SHARE_PERMISSIONS] [varchar](65) NULL,

以下哪种方法最好:

1-
ALTER PROCEDURE [dbo].[PROC_INSERT_SHARE_AD_GROUP]


@shareID int,
@ownerId varchar(200),
@sharePermissions varchar(65)

AS

BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    UPDATE [dbo].SHARE_AD_GROUP
               SET 
                   [SHARE_PERMISSIONS] = @sharePermissions
             WHERE SHARE_ID = @shareID and [AD_GROUP] = @ownerId
    if @@ROWCOUNT =0 
    begin
    INSERT INTO [dbo].SHARE_AD_GROUP
                       (SHARE_ID,[AD_GROUP],[SHARE_PERMISSIONS])
                 VALUES
                       (@shareID,@ownerId,@sharePermissions)
    end

end

2-
   BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.

    declare @id int
    SET NOCOUNT ON;
    set @id = (select top 1 SHARE_AD_GROUP_ID from SHARE_AD_GROUP where SHARE_ID = @shareID and [AD_GROUP] = @ownerId)
        if @id is null
            begin
                INSERT INTO [dbo].SHARE_AD_GROUP
                       (SHARE_ID,[AD_GROUP],[SHARE_PERMISSIONS])
                 VALUES
                       (@shareID,@ownerId,@sharePermissions)
                 set @id = SCOPE_IDENTITY()
            end
        else
            begin
            UPDATE [dbo].SHARE_AD_GROUP
               SET 
                   [SHARE_PERMISSIONS] = @sharePermissions
             WHERE SHARE_ID = @shareID and [AD_GROUP] = @ownerId
            end
End

3- 合并 ==> 不知道怎么写。

你认为最快的方法是什么?

最佳答案

我认为合并语句比您以两种方式展示的更快。如果您需要了解有关如何在 sql server 中编写 MERGE INTO Query 的更多信息,请点击链接。

http://blog.sqlauthority.com/2008/08/28/sql-server-2008-introduction-to-merge-statement-one-statement-for-insert-update-delete/

https://www.simple-talk.com/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/

你的合并块看起来像这样,你需要把它放在你的存储过程或任何其他地方。

MERGE INTO SHARE_AD_GROUP A
USING (
    SELECT SHARE_AD_GROUP_ID,
        SHARE_ID,
        AD_GROUP,
        SHARE_PERMISSIONS
    FROM SHARE_AD_GROUP
    WHERE SHARE_ID = @shareID AND AD_GROUP = @ownerId
) B ON (A.SHARE_AD_GROUP_ID = B.SHARE_AD_GROUP_ID)
WHEN MATCHED THEN
    UPDATE SET A.SHARE_PERMISSIONS = B.SHARE_PERMISSIONS
WHEN NOT MATCHED THEN
    INSERT (SHARE_PERMISSIONS) VALUES(@sharePermissions);

关于sql-server-2008 - 快速更新插入 Sql server 2008 R2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18873747/

相关文章:

没有输入参数的 SQL 函数

sql - SELECT TOP N 有两个变量

c# - 通过 C# 连接到 SQL Server 2008 数据库

sql - 将子查询直接传递给 SQL Server 中 USP 中的表类型参数

sql - 如何将数据库图从一台服务器移动到另一台服务器

sql - 设置快照隔离不反射(reflect)

sql-server - T-SQL : I'm trying to get the latest row of a column but also the sum of another column

mysql - 如何插入带有一额外列的临时表

database - 在日期时间字段上仅存储日期的最佳方式?

sql-server-2008 - 在SQL Server Management Studio中备份连接列表