Sql server 找出原因。我会调查的。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Product]( [ProductID] [int] IDENTITY(1,1) N

Sql server 找出原因。我会调查的。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Product]( [ProductID] [int] IDENTITY(1,1) N,sql-server,tsql,Sql Server,Tsql,找出原因。我会调查的。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Product]( [ProductID] [int] IDENTITY(1,1) NOT NULL, [ProductCategory] [int] NOT NULL, [ProductCategoryGuid] [uniqueidentifier] NULL, CONSTRAINT [PK_Product]

找出原因。我会调查的。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Product](
    [ProductID] [int] IDENTITY(1,1) NOT NULL,
    [ProductCategory] [int] NOT NULL,
    [ProductCategoryGuid] [uniqueidentifier] NULL,
 CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED 
(
    [ProductID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET IDENTITY_INSERT [dbo].[Product] ON 

GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (1, 2, NULL)
GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (2, 2, NULL)
GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (3, 2, NULL)
GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (4, 3, NULL)
GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (5, 4, NULL)
GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (6, 2, NULL)
GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (7, 3, NULL)
GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (8, 4, NULL)
GO
INSERT [dbo].[Product] ([ProductID], [ProductCategory], [ProductCategoryGuid]) VALUES (9, 4, NULL)
GO
SET IDENTITY_INSERT [dbo].[Product] OFF
GO
ProductID   ProductCategory ProductCategoryGuid
1            2                NULL
2            2                NULL
3            2                NULL
4            3                NULL
5            4                NULL
6            2                NULL
7            3                NULL
8            4                NULL
9            4                NULL
DECLARE @Results TABLE (
    [ProductCategory] [int] NOT NULL,
    [ProductCategoryGuid] [uniqueidentifier] NOT NULL DEFAULT (NEWID())
)

INSERT  @Results (ProductCategory)
SELECT  DISTINCT p.ProductCategory
FROM    dbo.Product p

UPDATE  p 
SET     ProductCategoryGuid = r.ProductCategoryGuid
OUTPUT  deleted.ProductCategoryGuid, inserted.ProductCategoryGuid
FROM    dbo.Product p
INNER JOIN @Results r ON p.ProductCategory = r.ProductCategory
;WITH CteUpdateProduct
AS (
    SELECT *, FIRST_VALUE(NewGUID) OVER(PARTITION BY ProductCategory ORDER BY ProductID) AS NewProductCategoryGuid
    FROM (
        SELECT  p.*, NEWID() AS NewGUID
        FROM    dbo.Product p
    ) x
)
UPDATE  CteUpdateProduct
SET     ProductCategoryGuid = NewProductCategoryGuid
OUTPUT  inserted.ProductID, inserted.ProductCategory, inserted.ProductCategoryGuid;
WITH productCategories as (
  SELECT DISTINCT ProductCategory 
  FROM product
), productCategoriesWithGuid as (
  SELECT ProductCategory, NEWID() ProductCategoryGuid
  From productCategories
) 
UPDATE product 
SET ProductCategoryGuid = pc.ProductCategoryGuid
FROM Product p
JOIN productCategoriesWithGuid pc on p.ProductCategory = pc.ProductCategory