尝试用循环从其他两个表插入到表中
DECLARE @RowCount INT
SET @RowCount = (SELECT Max(FogTopicsID) FROM FSB_FogTopics )
DECLARE @I INT
SET @I = 1
WHILE (@I <= @RowCount)
BEGIN
DECLARE @FogID INT, @StudentID INT, @TopicID INT, @ProcessStudentId INT
SELECT @FogID = FogID, @StudentID = StudentID, @TopicID = TopicsID
FROM FSB_FogTopics
WHERE FogTopicsID = @I
SELECT @ProcessStudentId = ProStudentId
FROM FSB_ProcessStudents
WHERE ProcessId = @FogID AND StudentId = @StudentID
INSERT INTO FSB_ProcessTopics( [ProcessStudentId], [TopicId])
VALUES (@ProcessStudentId, @TopicID)
SET @I = @I + 1
END但我犯了个错误
必须声明标量变量
@ProcessStudentId
发布于 2017-02-16 13:50:25
正如叉车的评论所指出的--你可以使用正确的基于集合的解决方案,而不是像这样可怕的循环;
INSERT FSB_ProcessTopics( [ProcessStudentId], [TopicId])
SELECT
s.ProStudentId,
f.TopicsId
FROM FSB_FogTopics f
INNER JOIN FSB_ProcessStudents s
ON f.FogId = s.ProcessId
AND f.StudentId = s.StudentId虽然我意识到这并不能回答你的问题,这是一个更好的方法,应该消除需要解决你的问题.
您可能有不连续的is所以您有1,2,4作为is,但是您的代码正在尝试对1,2,3,4进行处理。
发布于 2017-02-16 13:51:34
您不需要循环来完成这个任务(您几乎不应该需要在SQL中为任何事情使用循环)。您可以在一条语句中执行INSERT:
Insert FSB_ProcessTopics
(ProcessStudentId, TopicId)
Select P.ProStudentId, T.TopicsId
From FSB_FogTopics T
Join FSB_ProcessStudents P On P.ProcessId = T.FogId
And P.StudentId = T.StudentId发布于 2017-02-16 13:52:38
作为一条语句执行此操作:
INSERT FSB_ProcessTopics(ProcessStudentId, TopicId)
SELECT ProStudentId, TopicsID
FROM FSB_FogTopics ft JOIN
FSB_ProcessStudents ps
ON ft.StudentID = ps.StudentId AND sps.ProcessId = ft.FogiId;这将取代游标、循环、所有内容。
https://stackoverflow.com/questions/42275718
复制相似问题