1

任何人都可以帮我解决这个问题。我有一张不唯一的表(因为我正在翻阅我前任的旧数据库。)

我想将它分配给我拥有的 Fruits 表中的“ID”字段。

我想继续设置 NEWSEQUENTIALID(),这样我就可以看到我正在使用的所有内容。

4

3 回答 3

2

假设 ID 是 uniqueidentifier 类型,您可以创建另一列,默认为顺序 guid。这将填充该列中的值。之后,您可以将这些值复制到您的 id 列,然后删除 tmp 列。输入所有数据后,为您的 id 列指定默认值。请参阅下面的 SQL 脚本:

--创建一个默认为顺序ID的新列

USE [BASKET]
ALTER TABLE [FRUITS]
ADD  [TMPID] UNIQUEIDENTIFIER NOT NULL  CONSTRAINT DF_TMPID DEFAULT NEWSEQUENTIALID()
GO

--使用新创建的值更新现有的 id 列值

UPDATE [FRUITS] SET ID = TMPID GO

--删除约束

ALTER TABLE [FRUITS] DROP CONSTRAINT DF_TMPID GO

--删除临时列

ALTER TABLE [FRUITS] DROP COLUMN TMPID GO 

--为新插入的默认值指定默认值

ALTER TABLE [FRUITS]  ADD DEFAULT NEWSEQUENTIALID() FOR ID

- 或者 -

ALTER TABLE [FRUITS] ADD CONSTRAINT DF_ROWGUID DEFAULT NEWSEQUENTIALID()  FOR ID;
于 2014-08-08T09:34:21.843 回答
0
CREATE PROCEDURE [dbo].[uspGetSequentialGuid] 
AS
DECLARE @SequentialGuids as Table ( SequentialGuid uniqueidentifier DEFAULT NEWSEQUENTIALID() PRIMARY KEY,InitDate  datetime  )
BEGIN
INSERT INTO @SequentialGuids(InitDate) Values(GETDATE());
END
SELECT   SequentialGuid from @SequentialGuids
GO
于 2015-05-15T14:10:54.593 回答
0
CREATE PROCEDURE [dbo].[uspGetSequentialGuids](@RequiredGuids as int) 
AS
DECLARE @SequentialGuids as Table ( SequentialGuid uniqueidentifier DEFAULT NEWSEQUENTIALID() PRIMARY KEY,InitDate  datetime  )
Declare @Counter int
SET @Counter = 0
While @Counter < @RequiredGuids
BEGIN
INSERT INTO @SequentialGuids(InitDate) Values(GETDATE());
SET @Counter = @Counter + 1
END
SELECT   SequentialGuid from @SequentialGuids
GO
于 2015-05-15T14:14:43.987 回答