在 Microsoft Fabric 的仓库表中生成唯一标识符
适用于: Microsoft Fabric 中的仓库
在数据仓库中,通常需要为表中的每一行分配唯一标识符。 在基于 SQL Server 的环境中,通常通过在表中创建“标识列”来完成,但 Microsoft Fabric 中的仓库不支持此功能。 而你需要使用一种解决方法。
解决方法
本文介绍了一种在仓库表中生成唯一标识符的解决方法。
步骤 1:创建具有标识符列的表
首先,应创建一个表,其中包含存储唯一标识符值的列。 列数据类型应设置为“int 或 bigint”,具体取决于预期存储的数据量。 你还应该将列定义为 NOT NULL
,以确保为每一行分配一个标识符。
以下代码在 dbo
架构中创建一个名为 Orders_with_Identifier
的示例表。
--Drop a table named 'Orders_with_Identifier' in schema 'dbo', if it exists
IF OBJECT_ID('[dbo].[Orders_with_Identifier]', 'U') IS NOT NULL
DROP TABLE [dbo].[Orders_with_Identifier];
GO
CREATE TABLE [dbo].[Orders_with_Identifier] (
[Row_ID] BIGINT NOT NULL,
[O_OrderKey] BIGINT NULL,
[O_CustomerKey] BIGINT NULL,
[O_OrderStatus] VARCHAR(1) NULL,
[O_TotalPrice] DECIMAL(15, 2) NULL,
[O_OrderDate] DATE NULL,
[O_OrderPriority] VARCHAR(15) NULL,
[O_Clerk] VARCHAR (15) NULL,
[O_ShipPriority] INT NULL,
[O_Comment] VARCHAR (79) NULL
);
GO
步骤 2:确定最后一个标识符值
在将行插入表中之前,你需要确定表中存储的最后一个标识符值。 你可以通过取回“最大”标识符值来执行此操作。 应将此值分配给一个变量,以便在插入表行时引用(下一步)。
以下代码将最后一个标识符值分配给名为 @MaxID
的变量。
--Assign the last identifier value to a variable
--If the table doesn't contain any rows, assign zero to the variable
DECLARE @MaxID AS BIGINT;
IF EXISTS(SELECT * FROM [dbo].[Orders_with_Identifier])
SET @MaxID = (SELECT MAX([Row_ID]) FROM [dbo].[Orders_with_Identifier]);
ELSE
SET @MaxID = 0;
步骤 3:插入唯一标识符值
在表中插入行时,通过将 @MaxID
变量值与“ROW_NUMBER”函数返回的值相加,计算出唯一的序号。 此函数是一个窗口函数,用于计算从 1 开始的顺序行号。
以下代码(与步骤 2 中的脚本在同一批次中运行)将行插入 Orders_with_Identifier
表中。 Row_ID
列的值是通过将 @MaxID
变量与 ROW_NUMBER
函数返回的值相加计算出来的。 函数必须有一个 ORDER BY
子句,该子句定义了结果集中行的逻辑顺序。 但如果将其设置为 SELECT NULL
,则不强制执行逻辑顺序,这意味着可以任意分配标识符值。 ORDER BY
子句会使执行时间更快。
--Insert new rows with unique identifiers
INSERT INTO [dbo].[Orders_with_Identifier]
SELECT
@MaxID + ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS [Row_ID],
[src].[O_OrderKey],
[src].[O_CustomerKey],
[src].[O_OrderStatus],
[src].[O_TotalPrice],
[src].[O_OrderDate],
[src].[O_OrderPriority],
[src].[O_Clerk],
[src].[O_ShipPriority],
[src].[O_Comment]
FROM [dbo].[Orders] AS [src];
相关内容
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈