如何在不删除sql server表中数据的情况下,让自增的id列从1开始

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不删除sql server表中数据的情况下,让自增的id列从1开始相关的知识,希望对你有一定的参考价值。

最简单的方法:打开Management Studio 或者企业管理器,选择要修改的数据库表-右键选设计。
把标识规范由是改为非,然后保存。
然后插入一条新数据 ID列设置为1,再重新设置成是,种子设置为1即可。
参考技术A 方法1.清空数据时不用delete from tbname 而是用truncate table tbname方法2:先清空数据delete from tbname再重置自增种子dbcc checkident(tbname,reseed,0) 参考技术B 重新建立一个带自增id列的表,然后把原有表的数据导入进去,再把原表删除,新表改名

如何在不使用pivot和unpivot的情况下在SQL Server中水平显示数据?

有没有办法在不使用pivot和unpivot方法的情况下在sql中显示水平数据?下图是使用pivot和unpivot的示例,但我想知道还有其他方法吗?

Example

原始数据

+----+-------+-----------------+
| id | Place | Location        |
+----+-------+-----------------+
|  1 |  CP01 | 3.1415,101.7231 |
|  2 |  CP02 | 3.2314,101.3254 |
|  3 |  CP03 | 3.9415,101.0192 |
|  4 |  CP04 | 3.5490,102.0435 |
|  5 |  CP05 | 3.2562,101.2597 |
|  6 |  CP06 | 3.1134,102.5915 |
+----+-------+-----------------+

Horizontal Data

+----------+-----------------+-----------------+-----------------+-----+
| Cols     | 1               | 2               | 3               | ... |
+----------+-----------------+-----------------+-----------------+-----+
| Location | 3.1415,101.7231 | 3.2314,101.3254 | 3.9415,101.0192 | ... |
|    Place | CP01            | CP02            | CP03            | ... |
+----------+-----------------+-----------------+-----------------+-----+

Image for clarification

答案

你可能会寻找这样的东西:

DECLARE @GeoData TABLE (Id INT, Place VARCHAR(10), [Location] VARCHAR(100))

INSERT INTO @GeoData

 SELECT 1,'CP01','3.1415,101.7231' 
 UNION ALL
 SELECT 2,'CP02','3.2314,101.3254'

SELECT  'Location' AS Cols,
        MAX(CASE WHEN t.Id = 1 THEN t.Location END) AS [1],
        MAX(CASE WHEN t.Id = 2 THEN t.Location END) AS [2],
        MAX(CASE WHEN t.Id = 2 THEN t.Location END) AS [3]      
 FROM @GeoData t

 UNION ALL

 SELECT  'Place' AS Cols,
        MAX(CASE WHEN t.Id = 1 THEN t.Place END) AS [1],
        MAX(CASE WHEN t.Id = 2 THEN t.Place END) AS [2],
        MAX(CASE WHEN t.Id = 2 THEN t.Place END) AS [3]     
 FROM @GeoData t
另一答案

类似的方法是你可以使用交叉应用与一些条件聚合,以实现pivotunpivot方式

SELECT a.Col1, MAX(case when a.ID = 1 then a.Value end) [1],
               MAX(case when a.ID = 2 then a.Value end) [2],
               MAX(case when a.ID = 3 then a.Value end) [3]
FROM table T
CROSS APPLY (VALUES ('Place', T.place, T.ID),
                    ('Location', T.Location, T.ID)
            ) as a(Col1, Value, ID)
group by a.Col1

以上是关于如何在不删除sql server表中数据的情况下,让自增的id列从1开始的主要内容,如果未能解决你的问题,请参考以下文章

在不添加/删除聚集索引的情况下减少 SQL Server 表碎片?

我可以在不中断复制的情况下从 SQL Server 复制订阅者数据库中删除特定数据吗?

SQL-如何在不自动增加 ID 列的情况下插入行?

如何在不创建快照的情况下从 cassandra 表中删除所有记录

如何在不使用数据透视和反透视的情况下在 SQL Server 中水平显示数据?

如何在不使用pivot和unpivot的情况下在SQL Server中水平显示数据?