首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server : error“必须声明Scalar变量”

Server : error“必须声明Scalar变量”
EN

Stack Overflow用户
提问于 2017-02-16 13:45:15
回答 3查看 1.6K关注 0票数 0

尝试用循环从其他两个表插入到表中

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

发布于 2017-02-16 13:50:25

正如叉车的评论所指出的--你可以使用正确的基于集合的解决方案,而不是像这样可怕的循环;

代码语言:javascript
复制
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进行处理。

票数 2
EN

Stack Overflow用户

发布于 2017-02-16 13:51:34

您不需要循环来完成这个任务(您几乎不应该需要在SQL中为任何事情使用循环)。您可以在一条语句中执行INSERT

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2017-02-16 13:52:38

作为一条语句执行此操作:

代码语言:javascript
复制
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;

这将取代游标、循环、所有内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42275718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档