如何通过微小的修改简明地复制多个SQL行?

时间:2010-04-20 11:33:46

标签: sql insert copy

我正在复制某些数据的子集,以便将来可以独立修改副本。

我的一个SQL语句看起来像这样(我改变了表名和列名):

INSERT Product(
  ProductRangeID,
  Name, Weight, Price, Color, And, So, On
)
SELECT
  @newrangeid AS ProductRangeID,
  Name, Weight, Price, Color, And, So, On
FROM Product
WHERE ProductRangeID = @oldrangeid and Color = 'Blue'

也就是说,我们推出了一个新的产品系列,最初只包含新SKU下某些指定电流范围内的所有蓝色产品。将来我们可能会改变产品的“蓝色”版本,而不是旧版本。

我对SQL很陌生:我应该做些什么来避免列出所有这些列,或者至少避免列出两次?我可以使用当前代码,但如果将新列添加到Product,我宁愿不回来修改它。在目前的形式中,如果我忘记这样做,它就会默默地无法复制新列,这应该在测试中显示但不是很好。

我正在复制除ProductRangeID(我修改),ProductID(递增主键)和两个DateCreated和timestamp列(它们为新行自动生成的值)之外的每一列。

顺便说一下,我怀疑我应该在ProductID和ProductRangeID之间有一个单独的连接表。我没有定义表格。

这是在SQL Server 2008上的T-SQL存储过程中,如果这有任何区别。

2 个答案:

答案 0 :(得分:1)

SELECT中,您可以使用*或明确列出所有列和表达式,但不存在部分通配符。

如果只是一次性查询且性能不重要,您可以在临时表或表变量中执行SELECT *,后跟表UPDATE

答案 1 :(得分:1)

您可以省略目标表的字段名称,但通常不应该。

如果未指定目标表的字段,则将依赖于在表中定义它们的顺序。如果有人更改了该顺序,查询将停止工作。或者更糟糕的是,它可以将值放在错误的字段中。

另一个方面是,查看查询的功能会更容易,这样您就不必打开表格来查看字段是什么来理解查询。