SQL SERVER 插入加法?

Posted

技术标签:

【中文标题】SQL SERVER 插入加法?【英文标题】:SQL SERVER Insert Addition? 【发布时间】:2014-03-10 15:05:40 【问题描述】:

所以这看起来应该很容易。但是假设我有一个插入:

insert into TABLE VALUES ('OP','OP_DETAIL','OP_X')

我希望 X 从 1 到 100。 (知道其中一些数字已经存在,所以如果插入失败,我希望它继续进行)

我该怎么做?

【问题讨论】:

您可以在循环中执行此操作,在插入记录之前检查“OP_X”是否存在。还有一种更优雅的方法可以使用公用表表达式(如果您的 SQL Server 版本支持它)。 合并语句将插入或更新:***.com/a/243670/93161 【参考方案1】:

这里有一个稍微快一点的方法

-- techniques from Jeff Moden and Itzik Ben-Gan:
;WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),
      E02(N) AS (SELECT 1 FROM E00 a, E00 b),
      E04(N) AS (SELECT 1 FROM E02 a, E02 b),
      E08(N) AS (SELECT 1 FROM E04 a, E04 b),
   cteTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY N) FROM E08)
INSERT INTO yourTable
SELECT 'OP','OP_DETAIL','OP_' + CAST(N AS varchar)
FROM   cteTally
WHERE  N <= 100

【讨论】:

【参考方案2】:

不需要循环。基于集合的方法 FTW!

这是您应该使用数字表的主要示例。其他回答者即时创建了等价物,但如果你问我,你无法击败一张好的老式桌子!

使用您最好的 Google-Fu 查找脚本或 here's one I made earlier

INSERT INTO your_table (you_should, always_list, your_columns)
SELECT 'OP'
     , 'OP_DETAIL'
     , 'OP_' + Cast(number As varchar(11))
FROM   dbo.numbers
WHERE  number BETWEEN 1 AND 100
AND    NOT EXISTS (
         SELECT your_columns
         FROM   your_table
         WHERE  your_columns = 'OP_' + Cast(numbers.number As varchar(11))
       )
;

【讨论】:

【参考方案3】:
CREATE TABLE #Temp (
    OPCol VARCHAR(128),
    OPDetailCol VARCHAR(128),
    OPXCol VARCHAR(128)
)

--Add sample data, representing some random OPX values that may already exist.
INSERT INTO #Temp (OPCol, OPDetailCol, OPXCol)
VALUES 
    ('OP','OP_DETAIL','OP_4'),
    ('OP','OP_DETAIL','OP_22'),
    ('OP','OP_DETAIL','OP_39'),
    ('OP','OP_DETAIL','OP_70')

--Common table expression with recursion.
;WITH CTE AS
(
    SELECT 1 AS OPCounter
    UNION ALL
    SELECT OPCounter + 1
    FROM CTE
    WHERE OPCounter < 100
)
INSERT INTO #Temp (OPCol, OPDetailCol, OPXCol)
SELECT 'OP','OP_DETAIL','OP_' + CAST(OPCounter AS VARCHAR(3))
FROM CTE
WHERE NOT EXISTS (
    SELECT 1
    FROM #Temp t
    WHERE t.[OPXCol] = 'OP_' + CAST(OPCounter AS VARCHAR(3))
)

--Verify results
SELECT * FROM #Temp

【讨论】:

以上是关于SQL SERVER 插入加法?的主要内容,如果未能解决你的问题,请参考以下文章

为什么SQL Server不遵循带有SUM的BODMAS数学规则?

最佳加法表达式(动态规划)

最佳加法表达式

JavaScript中的加法运算

loj数列分块入门

119.超长正整数的加法