【问题标题】:Adding predefined value in mssql multiple times在 mssql 中多次添加预定义值
【发布时间】:2016-06-16 13:37:42
【问题描述】:

我创建了一个测试表来测试这是否可能我的任务是在多行中添加相同的值:

declare  @counter int
set @counter = 100

case when @counter > 0 then insert into table test values('1','2')
@count=@count - 1

现在这应该在 100 行中添加值 1 和 2,但它不起作用。谁能确认上述代码是否接近解决任务?

【问题讨论】:

    标签: sql-server variables parameters insert


    【解决方案1】:
    DECLARE @counter INT = 100;
    
    WHILE @counter > 0
    BEGIN
       insert into table test values('1','2');
       @count=@count - 1;
    END;
    

    但这可能更好,因为同时发送所有 100 个插入

    Fiddle Demo

    CREATE table test (
        f1 text,
        f2 text
    );    
    
    ;WITH e1(n) AS
    (
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
        SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
    ), -- 10
    e2(n) AS (
        SELECT 1 FROM e1 CROSS JOIN e1 AS b
    )  -- 100
    INSERT INTO test
        SELECT '1', '2' 
        FROM e2;
    
    SELECT *
    FROM test;
    

    【讨论】:

    • 这很完美!第二个问题是,我可以插入的最大数量是多少而不会对数据库造成损坏?还有 100.000 人?
    • 第一个版本可以支持任意数量,你唯一的限制是INT 第二个版本你需要扩展CTE,e3(n)为1k,e4(n)为10k,e5(n) 100k。您唯一的限制应该是内存,但对于这么小的查询来说,100k 不算什么。
    【解决方案2】:

    由于这只是为了测试,您可以让这变得超级简单。我永远不会在生产中使用这样的代码,但生成测试数据就可以了。

    insert into table test values('1','2')
    go 100
    

    【讨论】:

    • 我第一次看到,但似乎缺少了什么。我尝试HERE 并得到go sintaxis 的错误。你能检查一下缺少什么吗?
    • 我怀疑它会在那里工作。这是您可以使用的 SSMS 快捷方式。我从未见过它在外面的任何地方工作。在 SSMS 中试一试,它工作正常。
    • 事实上它甚至被记录在案。 :) msdn.microsoft.com/en-us/library/ms188037.aspx
    • 我明白了,可能是在线版本即使@@version说2014也不支持它,或者需要指定不同的分隔符
    【解决方案3】:
    ;WITH rws AS 
    (
        SELECT TOP 100 1 AS dummy
        FROM sys.objects o1
        CROSS JOIN sys.objects o2
    )
    --INSERT INTO MyTable(id_1, id_2)
    SELECT 1 AS id_1, 2 AS id_2
    FROM rws
    

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多