尝试进行查询以将同一组值多次插入表中,其中一个值是另一个表中的 ID 号,另一个 where 子句的结果确定 ID 的列表
我正在使用类似于以下查询的内容从数据库中提取公司名称列表,这些公司名称安装了特定类型的产品类型(自定义定价等) 目前该列表将用于手动将新产品添加到数据库中该列表中的每个公司(前端只有从公司记录添加的接口)
我想将相同的产品添加到所有公司列表中,因此我的计划是调整下面的查询以列出 CompanyID 编号并使用该列表:
Use DBNAME SELECT DISTINCT CompanyName FROM CompanyList JOIN ProductList ON CompanyList.CompanyID = ProductList.CompanyID WHERE ProductList.ProductTypeID IN (71,72,73) ORDER BY CompanyName
SET IDENTITY_INSERT [ProductList] ON INSERT [dbo].[ProductList] ([ProductID][Name],[ProductTypeID],[Cost],[WholesaleRate],[UndeID],[Limit],[Days],[SortOrder],[Expired],[CompanyID]) VALUES (-1,'ProductF',77,3.9,5.75,7,0,0,1,No,???) SET IDENTITY_INSERT [ProductList] OFF
我希望我需要在 where 中将 CompanyName 替换为 CompanyID,并以将它们包装在事务中并允许插入单步执行 where 的结果的方式将两者结合起来,也许将每个结果作为变量传递给插入?
但我不确定从哪里开始。
感谢您的帮助,如果其他人有此问题,请参阅下面从标记的最佳答案得出的最终工作结果:
Use CVR_Sandbox begin transaction INSERT INTO [dbo].[ProductList] ([Name], [ProductTypeID], [Cost], [WholesaleRate], [UndeID], [Limit], [Days], [SortOrder], [Expired], [CompanyID]) SELECT DISTINCT 'TESTPRODUCTname', 79, 3.9, 5.75, 7, 0, 0, 1, 0, cl.CompanyID FROM CompanyList cl JOIN ProductList pl ON cl.CompanyID = pl.CompanyID WHERE pl.ProductTypeID = 71 ORDER BY cl.CompanyID rollback transaction --commit transaction
您需要编写类似这样的内容 -INSERT INTO基于 a SELECT,其中大多数值是常量(如您的问题中的第二个查询中所定义)。
INSERT INTO
SELECT
SET IDENTITY_INSERT [ProductList] ON INSERT INTO [dbo].[ProductList] ([ProductID], [Name], [ProductTypeID], [Cost], [WholesaleRate], [UndeID], [Limit], [Days], [SortOrder], [Expired], [CompanyID]) SELECT DISTINCT -1, 'ProductF', 77, 3.9, 5.75, 7, 0, 0, 1, No, pl.CompanyID FROM CompanyList cl JOIN ProductList pl ON cl.CompanyID = pl.CompanyID WHERE pl.ProductTypeID IN (71, 72, 73) ORDER BY cl.CompanyName SET IDENTITY_INSERT [ProductList] OFF
不知道你为什么要做一个IDENTITY_INSERT ON然后为每一行插入相同的值-1......因为标识列通常是主键 - 这可能是灾难(和错误)的秘诀......你真的需要这个吗?为什么不让数据库分发身份值?毕竟,这就是您定义它们的目的......
IDENTITY_INSERT ON