1

所以我有一个巨大的脚本文件,它将加载和加载数据到我的数据库中,这是一个示例。

INSERT INTO [dbo].[SysCountry] ([country_id], [country_name]) VALUES (NEWID(), 'Argentina');
INSERT INTO [dbo].[SysCountry] ([country_id], [country_name]) VALUES (NEWID(), 'Armenia');
INSERT INTO [dbo].[SysCountry] ([country_id], [country_name]) VALUES (NEWID(), 'Aruba');

不,如果不是 1000 个 NEWID() 标签,我有 100 个,但是我需要重新使用很多这些 ID。所以我想用一个实际的随机 GUID 替换所有 NEWID() 。所以输出看起来像。

INSERT INTO [dbo].[SysCountry] ([country_id], [country_name]) VALUES ('42FF2BE3-D2A7-4FD1-AAA9-6AA0FDBDDD28', 'Argentina');
INSERT INTO [dbo].[SysCountry] ([country_id], [country_name]) VALUES ('59FF040C-5102-41D8-9F8B-782B42983F0E', 'Armenia');
INSERT INTO [dbo].[SysCountry] ([country_id], [country_name]) VALUES ('7589B5F1-21C0-4EF8-897E-B8C7FF8EDFA9', 'Aruba');

我正在使用 Notepad++ 来写这个,所以如果你知道我可以在查找和替换中使用的正则表达式会很棒。或者如果你知道另一种方式。

谢谢,本

4

1 回答 1

3

NEWID()实际上是一个随机的 GUID。

如果您想重用它,例如在填充子表时,您可以从父表中再次获取它,例如,假设您填充了一个国家/地区,然后需要填充一个州表:

INSERT INTO [dbo].[SysCountry] ([country_id], [country_name]) VALUES (NEWID(), 'Australia');

INSERT INTO [dbo].[SysState] ([state_id], [country_id], [state_name])
SELECT 
   NEWID(),
   (SELECT [country_id] FROM [dbo].[SysCountry] WHERE [country_name] = 'Australia'),
   'Victoria'

你也可以使用一个局部变量来做同样的事情——脚本看起来会更好:

INSERT INTO [dbo].[SysCountry] ([country_id], [country_name]) VALUES (NEWID(), 'Australia');

DECLARE @id uniqueidentifier
SELECT @id = [country_id] FROM [dbo].[SysCountry] WHERE [country_name] = 'Australia'
INSERT INTO [dbo].[SysState] ([state_id], [country_id], [state_name])
    VALUES (NEWID(), @id, 'Victoria')
INSERT INTO [dbo].[SysState] ([state_id], [country_id], [state_name])
    VALUES (NEWID(), @id, 'New South Wales')
于 2013-10-06T11:21:36.607 回答