这里我有一个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是固定值。
怎么办?
答案 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',',')