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