带有一个int列表的多个插入

时间:2016-02-01 13:50:59

标签: sql sql-server-2008 tsql

这里我有一个SELECT列表和一个简单的插入示例

SELECT idUnit FROM dbo.GetUnitsTree(10)

INSERT INTO [Profession_Ext]
           ([FK_Personnal]
           ,[FK_Profession])
     VALUES
           (50
           ,<FK_Profession, int,>)

我希望得到相同的结果,但是动态地(我想编写脚本)

INSERT INTO [Profession_Ext]
               ([FK_Personnal]
               ,[FK_Profession])
         VALUES
               (50,1),(50,2),(50,3),(50,4),(50,5),(50,6),(50,7),(50,8)

其中50是固定值。

怎么办?

3 个答案:

答案 0 :(得分:3)

使用Select语句编写以下一个批量插入:

INSERT INTO [Profession_Ext] ([FK_Personnal] ,[FK_Profession])
SELECT 50 AS [FK_Personnal], tbl.[FK_Profession] 
FROM (
    SELECT 1 AS FK_Profession 
    UNION ALL SELECT 2
    UNION ALL SELECT 3
    UNION ALL SELECT 4
    UNION ALL SELECT 5
    UNION ALL SELECT 6
    UNION ALL SELECT 7
    UNION ALL SELECT 8
) AS tbl

答案 1 :(得分:2)

  

这里我有一个int的动态列表(由SELECT提供)

如果您不需要INSERT以外的任何其他内容,我会直接从原始SELECT插入:

INSERT INTO Profession_Ext
([FK_Personnal] ,[FK_Profession])
SELECT {select list here}

或更改您的SELECT以填充临时表,然后从中拉出:

SELECT {select list here}
INTO @tmpResults

INSERT INTO Profession_Ext
([FK_Personnal] ,[FK_Profession])
SELECT 50, FK_Profession
FROM @tmpResults

答案 2 :(得分:-1)

首先创建一个return a table value .. like below

的函数
    CREATE FUNCTION [dbo].[SplitStringToInt] 
   (
     @LIST      VARCHAR(MAX) ,
     @DELIMITER VARCHAR(5)=null 
   ) 
   RETURNS @TABLEOFVALUES TABLE 
      (  
         [VALUE] int 
      ) 
AS 
   BEGIN

    set @DELIMITER=isnull(@DELIMITER,',')

      DECLARE @LENSTRING INT 

      WHILE LEN( @LIST ) > 0 
         BEGIN 

            SELECT @LENSTRING = 
               (CASE CHARINDEX( @DELIMITER, @LIST ) 
                   WHEN 0 THEN LEN( @LIST ) 
                   ELSE ( CHARINDEX( @DELIMITER, @LIST ) -1 )
                END
               ) 

            INSERT INTO @TABLEOFVALUES 
               SELECT convert(int,SUBSTRING( @LIST, 1, @LENSTRING ))

            SELECT @LIST = 
               (CASE ( LEN( @LIST ) - @LENSTRING ) 
                   WHEN 0 THEN '' 
                   ELSE RIGHT( @LIST, LEN( @LIST ) - @LENSTRING - 1 ) 
                END
               ) 
         END

      RETURN 

   END

然后你可以像......一样使用它。

INSERT INTO [Profession_Ext] ([FK_Personnal] ,[FK_Profession])
select 50 A,VALUE from dbo.SplitStringToInt('1,2,3,4,5,6',',')