使用 T-SQL 插入 n 条记录
我想在表中添加可变数量的记录(天)
并且我已经看到了一个巧妙的解决方案:
SET @nRecords=DATEDIFF(d,'2009-01-01',getdate())
SET ROWCOUNT @nRecords
INSERT int(identity,0,1) INTO #temp FROM sysobjects a,sysobjects b
SET ROWCOUNT 0
但遗憾的是这在 UDF 中不起作用(因为 #temp 和 SET ROWCOUNT)。 知道如何实现这一点吗?
目前我正在使用 WHILE 和表变量来完成此操作,但就性能而言,这不是一个好的解决方案。
I want to add a variable number of records in a table (days)
And I've seen a neat solution for this:
SET @nRecords=DATEDIFF(d,'2009-01-01',getdate())
SET ROWCOUNT @nRecords
INSERT int(identity,0,1) INTO #temp FROM sysobjects a,sysobjects b
SET ROWCOUNT 0
But sadly that doesn't work in a UDF (because the #temp and the SET ROWCOUNT). Any idea how this could be achieved?
At the moment I'm doing it with a WHILE and a table variable, but in terms of performance it's not a good solution.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
当您有预先构建的数字表时,只需使用它:
首先有许多用于构建数字表的技术(使用此处的技术),但是一旦构建并建立索引,您就不会再次构建它。
When you have a pre-built numbers table, just use that:
There are any number of techniques for building the numbers table in the first place (using techniques here), but once it's built and indexed, you don't build it again.
这是我正在使用的方法,并且最适合我的目的并使用 SQL 2000。因为在我的例子中是在 UDF 内,所以我不能使用 ## 或 # 临时表,因此我使用表变量。
我正在做:
this is the approach I'm using and works best for my purposes and using SQL 2000. Because in my case is inside an UDF, I can't use ## or # temporary tables so I use a table variable.
I'm doing:
总体而言,每次迭代时将行数加倍要快得多,
我故意没有设置 NOCOUNT ON,以便您看到它如何插入 1,2,4,8 行
Overall much faster to double the amount of rows at every iteration
I deliberately did not SET NOCOUNT ON, so that you see how it inserts 1,2,4,8 rows
你可以做PinalDave 建议:
You could do what PinalDave suggests:
怎么样:
如果您不希望它为零索引,请删除“
- 1
”至少需要 SQL Server 2005。
How about:
If you don't want it zero-indexed, remove the "
- 1
"Requires at least SQL Server 2005.
如果您使用的是 SQL 2005 或更高版本,则可以使用递归 CTE 来获取日期或数字列表...
If you're using SQL 2005 or newer, you can use a recursive CTE to get a list of dates or numbers...
您可以使用 WHILE 语句来实现:
You can use a WHILE statement for that:
你可以使用交叉连接
you can use a cross join