如何用实际的随机Guid替换sql脚本文件中的NEWID()?

时间:2013-10-06 10:49:12

标签: sql sql-server replace newid

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

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

谢谢, 本

1 个答案:

答案 0 :(得分: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')