Sql server 2008 快速升级Sql server 2008 R2
我正在尝试使用SP将记录插入到一个表中Sql server 2008 快速升级Sql server 2008 R2,sql-server-2008,tsql,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- 二,- 3-Merg
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-
二,-
3-Merge=>不知道怎么写
你认为最快的方式是什么?我认为合并语句比你用两种方式演示的要快。如果您需要了解有关如何在sql server中将合并写入查询的更多信息,请访问以下链接 合并块如下所示,需要将其放入存储过程或任何其他位置
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);
我敢肯定你已经弄明白了。但有人可能会发现它很有用
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;
MERGE [dbo].SHARE_AD_GROUP AS T
USING
(
SELECT @shareID,@ownerId,@sharePermissions
) AS S
(
SELECT Share_ID,AD_Group,Share_Permissions
)
ON (T.SHARE_ID = S.Share_ID and T.AD_GROUP = S.AD_Group)
WHEN MATCHED THEN
UPDATE SET SHARE_PERMISSIONS = S.Share_Permissions
WHEN NOT MATCHED THEN
INSERT
(SHARE_ID,AD_GROUP,SHARE_PERMISSIONS)
VALUES
(S.Share_ID,S.AD_Group,S.Share_Permissions)
;
END
所有示例都使用两个表target和source,但在我的示例中,我传递的是SP参数。我搜索了,但找不到类似的案例。我已更新了我的答案。您可以查看并根据您的要求进行适当更改吗。可能的副本
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);
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;
MERGE [dbo].SHARE_AD_GROUP AS T
USING
(
SELECT @shareID,@ownerId,@sharePermissions
) AS S
(
SELECT Share_ID,AD_Group,Share_Permissions
)
ON (T.SHARE_ID = S.Share_ID and T.AD_GROUP = S.AD_Group)
WHEN MATCHED THEN
UPDATE SET SHARE_PERMISSIONS = S.Share_Permissions
WHEN NOT MATCHED THEN
INSERT
(SHARE_ID,AD_GROUP,SHARE_PERMISSIONS)
VALUES
(S.Share_ID,S.AD_Group,S.Share_Permissions)
;
END