sql 服务器 - 在 SP table 参数中插入排名列
sql server - inserting rank column in SP table-parameter
我的问题和这个类似:
how to maintain order while doing join in sql
基本上我在存储过程中有一个 table 参数,它包含一些特定顺序的 ID。我想根据输入 table 参数的顺序在内部联接和 return 结果中使用这些 ID。因此,我必须找到一种方法来构建一个包含排名和 ID 的新 table。
从我在类似帖子中看到的情况来看,在 SQL 中无法实现这一点,除非我还从外部非 SQL 世界(在我的 table参数)?
这对我来说似乎很陌生......
真的是这样吗?
更新:
(显然,我不能使用 ROW_NUMBER() 或 RANK(),因为它们需要按列排序,而我的 table 中只有 ID)
基本上,我的输入 table 是这种形式:
CREATE TYPE [dbo].[IdTable] AS TABLE(
[Id] [int] NOT NULL
)
它作为参数提供给我的 SP。
听起来你想要的是一个带有排名函数的子查询:
https://msdn.microsoft.com/en-us/library/ms189798.aspx
如果您使用从例如生成的列构建子查询ROW_NUMBER()
,并为该子查询取别名并加入它,然后您可以按该列对查询结果进行排序。
- 现在将
identity
启用种子的列添加到您的输入 table,列将自动填充它们插入的物理顺序。
- 加入后使用此列进行排序
我认为您可以在输入 table 参数的结构中使用一个新的 table 变量,并为 rank/rownumber 使用一个新的列(可能是标识列)。
然后你只需要像
一样填充table变量
INSERT INTO @tableVar(...) SELECT (...) FROM @inputTableParameter
您可以使用新的 table 变量和 rownumber/rank 列做任何事情。
我曾尝试在列上使用 IDENTITY,但我使用的 DataTable class 似乎不允许插入列数少于 table 的列数的行(这样我在插入数据时就不能省略 IDENTITY 列并让它自动递增)。
我所做的是提供来自 C# 代码的排名列值,并在我的 SP 中按该列排序。
这不是我能想到的最佳解决方案,但至少它有效。
我的问题和这个类似: how to maintain order while doing join in sql
基本上我在存储过程中有一个 table 参数,它包含一些特定顺序的 ID。我想根据输入 table 参数的顺序在内部联接和 return 结果中使用这些 ID。因此,我必须找到一种方法来构建一个包含排名和 ID 的新 table。
从我在类似帖子中看到的情况来看,在 SQL 中无法实现这一点,除非我还从外部非 SQL 世界(在我的 table参数)?
这对我来说似乎很陌生...... 真的是这样吗?
更新:
(显然,我不能使用 ROW_NUMBER() 或 RANK(),因为它们需要按列排序,而我的 table 中只有 ID)
基本上,我的输入 table 是这种形式:
CREATE TYPE [dbo].[IdTable] AS TABLE(
[Id] [int] NOT NULL
)
它作为参数提供给我的 SP。
听起来你想要的是一个带有排名函数的子查询:
https://msdn.microsoft.com/en-us/library/ms189798.aspx
如果您使用从例如生成的列构建子查询ROW_NUMBER()
,并为该子查询取别名并加入它,然后您可以按该列对查询结果进行排序。
- 现在将
identity
启用种子的列添加到您的输入 table,列将自动填充它们插入的物理顺序。 - 加入后使用此列进行排序
我认为您可以在输入 table 参数的结构中使用一个新的 table 变量,并为 rank/rownumber 使用一个新的列(可能是标识列)。 然后你只需要像
一样填充table变量INSERT INTO @tableVar(...) SELECT (...) FROM @inputTableParameter
您可以使用新的 table 变量和 rownumber/rank 列做任何事情。
我曾尝试在列上使用 IDENTITY,但我使用的 DataTable class 似乎不允许插入列数少于 table 的列数的行(这样我在插入数据时就不能省略 IDENTITY 列并让它自动递增)。
我所做的是提供来自 C# 代码的排名列值,并在我的 SP 中按该列排序。
这不是我能想到的最佳解决方案,但至少它有效。