Mik*_*son 14
如果您对从 1 开始的数字感到满意,则可以使用row_number().
update T
set cn = rn
from (
select cn,
row_number() over(order by (select 1)) as rn
from TableX
) T
Run Code Online (Sandbox Code Playgroud)
Jon*_*gel 11
尽管我认为您已经创建了该列,但在此答案中,我将假设该列尚不存在。国际海事组织,唯一的要求列应该永远不会在没有计划如何先填充现有行补充说。因此,我将提供从零开始执行此操作的方法。
您如何执行此操作取决于填充值所涉及的内容。
无论使用哪种方法,都要在列上添加唯一约束以确保数据完整性。对于方法 1 和 2,这可以在单个语句或用户事务(未显示)中完成,并且应该在方法 3 中的用户事务中完成。
可能还有其他一些晦涩的方法可以做到这一点,但我想我已经介绍了最常见的方法。
方法 1:添加 IDENTITY 列
ALTER TABLE MyTable ADD MyColumn int IDENTITY(1, 2) NOT NULL
Run Code Online (Sandbox Code Playgroud)
这将使用从种子值 (1) 开始的整数值填充表中的所有行,每行增加增量值 (2)。我相信填充值的顺序是未定义的(如果必须指定顺序,请使用方法 3)。
方法 2:使用默认约束填充
ALTER TABLE MyTable ADD MyColumn uniqueidentifier NOT NULL
CONSTRAINT DF_MyTable_MyColumn
DEFAULT (NEWSEQUENTIALID())
Run Code Online (Sandbox Code Playgroud)
这将原子地做三件事: 1. 添加一个不允许NULL值的列;2.为列创建默认约束;3. 使用默认约束填充表中的每一行。
虽然此示例使用一uniqueidentifier列,但它适用于任何数据类型和默认约束。
方法 3:使用 UPDATE 语句填充
例如,当您的应用程序的另一部分存在需要添加到表中的值,或者您需要为唯一值指定确切顺序时,就会发生这种情况。
BEGIN TRANSACTION
ALTER TABLE MyTable ADD MyColumn int NULL
UPDATE MyTable
SET MyColumn = ...
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)
方法 4:使用 SEQUENCE 对象填充
对于 SQL Server 2012,您可以使用SEQUENCE对象生成的值填充列——我还没有使用过它,因此我将参考MSDN 文章以确保完整性。
小智 10
以下更新列“cn”,序号从 1 开始
DECLARE @id INT
SET @id = 0
UPDATE X
SET @id = cn = @id + 1
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118525 次 |
| 最近记录: |