sql - 如何在执行 INSERT INTO 时在 SELECT 语句期间创建数据?
问题描述
对不起,如果这个问题令人困惑,但我不确定如何确切地问它。基本上我有一个有 20 列和数百万行的巨型表。我想将这些行和列的子集插入到另一个表中,然后还为这些行中的每一行在表中创建一个新时间和新 GUID。例如,假设我有下表:
CREATE TABLE [dbo].[AddressData](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[AddressDataGUID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[City] [varchar](32) NOT NULL,
[State] [varchar](2) NOT NULL,
[DateModified] [datetime2](7) NOT NULL,
[TS] [timestamp] NOT NULL,
CONSTRAINT [PK_AddressData_ID] PRIMARY KEY CLUSTERED [ID]
现在我还有另一个包含 City 和 State 的表,但它还有一堆其他列,例如 Street、Zip 等。我想从更大的表中选择每对不同的 City 和 State 并将它们粘贴到新表,我还希望它将 DateModified 设置为当前时间,并为每个不同的对创建一个新的随机 GUID。我无法弄清楚如何在 sql server 中执行此操作。我尝试了以下方法:
INSERT INTO Community (CommunityGUID, City, [State], DateModified)
VALUES (NEWID(), t.City, t.[State], SYSUTCDATETIME())
SELECT DISTINCT City, [State] FROM FullTable t
但是,我无法弄清楚正确的语法。我可以通过创建一个包含所有可空字段的临时表来解决这个问题,用这两个列选择不同的列,然后逐行循环创建所有这些值,然后最后将完全构造的表选择到另一个表中. 我几乎很想这样做,因为这是我作为软件开发人员而不是数据库开发人员的第一直觉,但是如果有一种方法可以在一个语句中做到这一点并让数据库引擎对其进行优化。
解决方案
我想你只是想要一个真正的查询INSERT
:
INSERT INTO Community (CommunityGUID, City, [State], DateModified)
SELECT NEWID(), t.City, t.[State], SYSUTCDATETIME()
FROM (SELECT DISTINCT City, [State]
FROM FullTable t
) t;
推荐阅读
- sql - SQL 3 表联合、连接、输入
- c# - 使用 MVVM 创建具有现有外部属性的 EF Core 实体
- python - 使用 subprocess.Popen 将输出重定向到文件
- python - 从列表中删除最大值和最小值而不复制列表
- c++ - 添加新库时未解决的外部符号错误 C++
- android - 我们可以访问双摄像头智能手机中的两个摄像头传感器吗
- apache-kafka - 使用 ksqldb-server 在 kafka 中创建表
- go - 带有两个对象的结构到 JSON
- mongodb - Strapi (CMS) - 如何配置以使用多个数据库/集合
- laravel - Laravel 8 无法正常工作,错误“file_put_contents”