如何插入多行 - 需要一个循环?

Mic*_*l A 3 sql t-sql sql-server sql-server-2008

我有以下声明:

insert into forecast_entry.user_role_xref
        ( user_master_id ,
          role_id ,
          created_date ,
          created_by
        )
values
        ( 276 , -- user_master_id - int
          101 , -- role_id - int
          getdate() , -- created_date - datetime
          'MICHAELSK'  -- created_by - varchar(20)
        )
Run Code Online (Sandbox Code Playgroud)

我需要为role_id 101-355生成一行(所以上面的语句相同,除了使用role_id递增重复).最好的方法是什么?为了完成工作,我打算编写一个快速的C#应用​​程序,它将有一个循环,但我确信这不是最好的方法,并希望在这里学到一些东西,以避免将来这样做(因为我'我确定这种情况很常见).

小智 11

这是我使用的,只需根据需要进行修改.在这里,我使用循环变量向表中添加了一堆序列号:

USE MyDB

GO

DECLARE @MyCounter as INT

SET @MyCounter = 1  -- to use this multiple times you can just

                    -- change the starting number and run again
                    -- if you do not want duplicate numbers

WHILE @MyCounter < 1000  -- any value you want

 BEGIN

    INSERT INTO [MyDB].[dbo].[MyTable]
        ([NumberField])
    VALUES
        (@MyCounter)  -- insert counter value into table

        set @MyCounter = @MyCounter + 1;  -- increment counter

END
Run Code Online (Sandbox Code Playgroud)


Mik*_*son 6

你应该使用数字表,如果你没有数字表,你可以master..spt_values像这样使用:

insert into forecast_entry.user_role_xref
        ( user_master_id ,
          role_id ,
          created_date ,
          created_by
        )
select 276, -- user_master_id - int
       number, -- role_id - int
       getdate() , -- created_date - datetime
       'MICHAELSK'  -- created_by - varchar(20)
from master..spt_values
where type = 'P' and
      number between 101 and 355
Run Code Online (Sandbox Code Playgroud)

  • +1对于数字表方法.但要注意`master..spt_values`.我不会在生产代码中使用它.请参阅http://stackoverflow.com/questions/4273723/what-is-the-purpose-of-system-table-table-master-spt-values-and-what-are-the-me,http:// social .msdn.microsoft.com /论坛/ zh-CN/transactsql/thread/a7cc9252-a1d1-4f51-9c35-7cd9720b507c,http://www.dbforums.com/microsoft-sql-server/1660575-using-master-dbo -spt_values-dangerous.html (3认同)