jer*_*ass 3 sql sql-server sql-server-2008
我需要在SQL中运行一个循环.谷歌这有点奇怪的原因有点困难.在SQL Server中,我只是把它放在SQL Server Managment Studio的查询编辑器中
DECLARE @z_start INT
SET @z_start = 0
DECLARE @z_end INT
SET @z_end = 0
WHILE (@z_start <= 14) BEGIN
IF(@z_start != 0 AND @z_end != 14)
WHILE (@z_end <= 14) BEGIN
INSERT INTO [campusMap].[dbo].[zoom_levels] ([zoom_start],[zoom_end]) VALUES (@z_start,@z_end)
SET @z_end = @z_end + 1
END
SET @z_start = @z_start + 1
END
END
Run Code Online (Sandbox Code Playgroud)
我想做的就是将zoom_start和zoom_end设置为(0,0)到(14,14)仅跳过(0,14),因为它已经在表中.
我想我很亲密.有谁知道它在哪里?谢谢.干杯 - 杰里米
Mic*_*son 14
您可以使用CTE(或预先存在的数字表)并一次添加所需的所有行,而不是执行嵌套循环并一次插入每一行:
;WITH Numbers (Number) AS
(
SELECT 0
UNION ALL
SELECT 1 + Number FROM Numbers
WHERE 1 + Number <= 14
)
INSERT INTO [campusMap].[dbo].[zoom_levels] ([zoom_start],[zoom_end])
SELECT n1.Number, n2.Number
FROM
Numbers n1 CROSS JOIN
Numbers n2
WHERE
NOT (n1.Number = 0 AND n2.Number = 14)
Run Code Online (Sandbox Code Playgroud)
SQL中的基于集合的操作通常比程序性的逐行方法更清晰,更易于理解.
| 归档时间: |
|
| 查看次数: |
15653 次 |
| 最近记录: |