条件SQL插入
我得写封信。insert语句,用于查看表并在满足条件时插入记录。这是一次性的,所以不要过分担心它的效率 该表包含一个项目的工作分解结构,每个项目有一个项目级WBS1、一个阶段级WBS2和一个任务级wbs3 那张桌子看起来像这样条件SQL插入,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,我得写封信。insert语句,用于查看表并在满足条件时插入记录。这是一次性的,所以不要过分担心它的效率 该表包含一个项目的工作分解结构,每个项目有一个项目级WBS1、一个阶段级WBS2和一个任务级wbs3 那张桌子看起来像这样 Wbs1 wbs2 wbs3 name 262 ProjectA 262 01 Data Analsys 262 01 01 Data cleans
Wbs1 wbs2 wbs3 name
262 ProjectA
262 01 Data Analsys
262 01 01 Data cleansing
262 01 02 Data Transforming
我需要使用insert语句向每个项目WBS1插入一个阶段wbs2,例如向每个项目WBS1添加一个wbs2 02
写insert语句没有问题,我从项目级别选择数据,因为大部分数据都是冗余的,所以没有问题,我只是不知道如何让它循环并将阶段添加到每个项目中,因为有多行具有相同的projectwbs1编号
插入语句示例
Insert into dbo.pr ([WBS1],[WBS2],[WBS3],[Name])
(Select [WBS1],'999',[WBS3],'In-House Expenses'
from dbo.pr where wbs1 = @ProjectID
and wbs2 ='')
如何运行此语句在每个项目中插入一行?wbs1
希望这是有意义的。您可以使用一个临时表,添加一个RowNumber字段,然后使用WHILE循环来处理每一行上的循环。然后,可以在运行存储过程之前运行IF EXISTS作为条件检查。例如,见下文
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
DECLARE @ProjectId NVARCHAR(50) = '262'
CREATE TABLE #Temp (RowNumber INT, wbs1 NVARCHAR(255), wbs2 NVARCHAR(255), wbs3 NVARCHAR(255), name NVARCHAR(255))
INSERT INTO #Temp
SELECT ROW_NUMBER() OVER (ORDER BY wbs1, wbs2, wbs3, name)
,pr.*
FROM pr
select *
from #temp
-- Create loop variables to handle incremeting
DECLARE @Counter INT = 1;
DECLARE @MaxLoop INT = (SELECT COUNT(wbs1) FROM #temp)
WHILE @Counter <= @MaxLoop
BEGIN
-- Use if Exists to check the current looped meets whatever critiera you have
IF EXISTS (SELECT 'true'
FROM #Temp
WHERE RowNumber = @Counter
AND wbs1 = @ProjectId
AND wbs2 = ''
)
BEGIN
Insert into pr (wbs1,wbs2,wbs3,name)
(Select [WBS1],'999',[WBS3],'In-House Expenses'
from #temp where RowNumber = @Counter)
END
-- Remember to increment the counter
SET @Counter = @Counter + 1;
END
SELECT *
FROM pr
drop table #temp
插入本身不能成为有条件的。它没有where子句。但你现在所做的才是最好的选择。从选择结果中插入,然后选择可以设置条件。这是MS SQL 2014 DB。如果要插入特定项目的记录,请删除第二个WHERE条件。在dbo.pr中插入[WBS1]、[WBS2]、[WBS3]、[Name]从dbo.pr中选择[WBS1]、'999'、[WBS3]、“内部费用”,其中WBS1=@projectd应该为特定项目插入行@projectd。我不确定我是否清楚地理解了您的问题,但只要您的插入语句样本符合您对特定WBS1记录的要求,如果您只删除where wbs1=@projectd条件,它还可以为其余的wbs1值正常工作。它如何知道为每个wbs1值添加一条记录?也许我在这里遗漏了一些非常简单的东西……我假设它必须选择每个wbs1,并为每个值重新运行insert语句一次,就像循环一样。