【问题标题】:Auto-increment subquery in tsql select statementsql select语句中的自增子查询
【发布时间】:2012-02-14 11:41:49
【问题描述】:

我有一个 T-SQL 选择语句,我想自动增加其中的一列(数据库中不存在)

select dbo.a, dbo.b, dbo.c, select @d:=1; @increment:=@increment+1 AS d

这可能吗?

【问题讨论】:

  • SQL Server 2000 应该很快就会被淘汰 - 即使是 2005 版本也不再受到 MS 的正式支持......

标签: sql sql-server tsql sql-server-2000


【解决方案1】:

假设您使用的是 SQL 2005 或更高版本:

SELECT dbo.a, dbo.b, dbo.c, ROW_NUMBER() OVER(ORDER BY GETDATE()) AS d

在从数据库返回时对行进行排序。如果你想指定一个订单,你可以这样做:

SELECT dbo.a, dbo.b, dbo.c, ROW_NUMBER() OVER(ORDER BY dbo.a) AS d

对于 SQL 2000 及更早版本,您需要一个唯一值来排序:

SELECT dbo.a, dbo.b, dbo.c, (SELECT COUNT(*) FROM dbo d2 WHERE d2.a <= dbo.a) AS d
FROM dbo

或者如果您不需要单个 SELECT:

SELECT IDENTITY(int,1,1) ID, dbo.a, dbo.b, dbo.c
INTO #Temp
FROM dbo

SELECT * FROM #Temp

【讨论】:

  • 我有 SQL2000。还有什么办法吗?
【解决方案2】:

我认为您可以通过以下方式实现它:

select dbo.a, dbo.b, dbo.c,  ROW_NUMBER() OVER (order by dbo.a) as d from somewhere;

我的答案假设 SQL Server 2005+,我认为 D Stanley 的答案会在 2000 年对您有所帮助。

【讨论】:

  • ROW_NUMBER() 是 SQL Server 2005 的新功能,OP 使用的是 SQL Server 2000
猜你喜欢
  • 2015-08-02
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多