Lau*_*n_G 0 t-sql temporary-tables azure-synapse-analytics
当我省略该ORDER BY
子句时,或者如果我将其作为选择运行并省略创建表部分,我有以下语句,但我需要这两者来确保生成的密钥排序正确
有任何想法吗?
消息 104381,级别 16,状态 1,第 18 行
ORDER BY 子句在视图、CREATE TABLE AS SELECT、INSERT SELECT、SELECT INTO、内联函数、派生表、子查询和公用表表达式中无效,除非 TOP 或 FOR XML 是还指定。
CREATE TABLE #demo
WITH (DISTRIBUTION = ROUND_ROBIN)
AS
SELECT
ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS ID,
schemas.name as [schema],
tables.name as [table],
columns.column_id as [ordinal],
columns.name as [column],
types.name as [type]
FROM SYS.COLUMNS
inner join sys.types
on types.system_type_id = columns.system_type_id
inner join sys.tables
on tables.object_id = columns.object_id
inner join sys.schemas
on schemas.schema_id = tables.schema_id
order by schemas.name,
tables.name,
columns.column_id
Run Code Online (Sandbox Code Playgroud)
我想这对你有用:
CREATE TABLE #demo
WITH (DISTRIBUTION = ROUND_ROBIN)
AS
SELECT
ROW_NUMBER() OVER (
ORDER BY S.[name], T.[name], C.column_id) AS ID,
S.[name] as [schema],
T.[name] as [table],
C.[column_id] as [ordinal],
C.[name] as [column],
TY.[name] as [type]
FROM sys.columns AS C
JOIN sys.types AS TY
ON TY.system_type_id = C.system_type_id
JOIN sys.tables AS T
ON T.[object_id] = C.[object_id]
JOIN sys.schemas AS S
ON S.[schema_id] = T.[schema_id];
Run Code Online (Sandbox Code Playgroud)
关键的区别是将排序移至ROW_NUMBER
窗口函数,以确定分配数字的顺序。