SQL Server循环并插入sql

标签 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

我想要做的就是设置zoom_start和zoom_end,使(0,0)到(14,14)仅跳过(0,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)

SQL 中基于集合的操作通常比过程化的逐行方法更清晰、更容易理解。

关于SQL Server循环并插入sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9875909/

相关文章:

c# - 在手动数据库编辑后同步迁移并继续 CodeFirst

sql - 如何将 SQL Server 中同一表中的一列插入到另一列中

sql - 具有可变数量参数的存储过程

sql-server - Delphi XE 中从 SQL 日期转换为日期时间

java - 如果查询是动态语句,如何在hibernate中绑定(bind)查询参数?

sql-server-2008 - 两个字符串使用 '=' 比较相等但在 'like' 比较中失败

sql - 在 SQL 中选择西里尔字符

java - Derby - java.sql.SQLException : Column 'table.column_name' not found

sql - 是否有任何 T-SQL 库可以将其转变为面向对象?

java - 如何在 JOOQ 中使用 toChar 函数?