-- 定义主题编号
DECLARE @TopicID INT-- 定义主题游标
DECLARE topic_Cur CURSOR
    FOR SELECT [TopicID] FROM [Bincess_Topic]-- 打开主题游标,并赋值主题编号
OPEN topic_Cur
FETCH NEXT FROM topic_Cur INTO @TopicIDWHILE @@FETCH_STATUS=0
BEGIN
    -- 更新主题最后回复信息
    EXEC [PROC_UpdateTopic_reply] @TopicID    FETCH NEXT FROM topic_Cur INTO @TopicID
END-- 关闭主题游标
CLOSE topic_Cur
DEALLOCATE topic_CurWHILE @@FETCH_STATUS=0这句是什么意思?EXEC [PROC_UpdateTopic_reply] @TopicID 什么意思?EXEC是执行的意思么?

解决方案 »

  1.   

    EXECUTE
    执行标量值的用户定义函数、系统过程、用户定义存储过程或扩展存储过程。同时支持 Transact-SQL 批处理内的字符串的执行 若要唤醒调用函数,请使用 EXECUTE stored_procedure 中描述的语法。语法
    执行存储过程:[ [ EXEC [ UTE ] ]
        { 
            [ @return_status = ]
                { procedure_name [ ;number ] | @procedure_name_var
        } 
        [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ]
            [ ,...n ] 
    [ WITH RECOMPILE ] 执行字符串:EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )参数
    @return_status是一个可选的整型变量,保存存储过程的返回状态。这个变量在用于 EXECUTE 语句前,必须在批处理、存储过程或函数中声明过。在用于唤醒调用标量值用户定义函数时,@return_status 变量可以是任何标量数据类型。procedure_name是拟调用的存储过程的完全合法或者不完全合法的名称。过程名称必须符合标识符规则。有关更多信息,请参见使用标识符。无论服务器的代码页或排序方式如何,扩展存储过程的名称总是区分大小写。 用户可以执行在另一数据库中创建的过程,只要该用户拥有此过程或有在该数据库中执行它的适当的权限。用户可以在另一台运行 Microsoft® SQL Server™ 的服务器上执行过程,只要该用户有适当的权限使用该服务器(远程访问),并能在数据库中执行该过程。如果指定了服务器名称但没有指定数据库名称,SQL Server 会在用户默认的数据库中寻找该过程。;number是可选的整数,用于将相同名称的过程进行组合,使得它们可以用一句 DROP PROCEDURE 语句除去。该参数不能用于扩展存储过程。在同一应用程序中使用的过程一般都以该方式组合。例如,在订购应用程序中使用的过程可以 orderproc;1、orderproc;2 等来命名。DROP PROCEDURE orderproc 语句将除去整个组。在对过程分组后,不能除去组中的单个过程。例如,DROP PROCEDURE orderproc;2 是不允许的。有关过程组的更多信息,请参见 CREATE PROCEDURE。 @procedure_name_var是局部定义变量名,代表存储过程名称。@parameter是过程参数,在 CREATE PROCEDURE 语句中定义。参数名称前必须加上符号 (@)。在以 @parameter_name = value 格式使用时,参数名称和常量不一定按照 CREATE PROCEDURE 语句中定义的顺序出现。但是,如果有一个参数使用 @parameter_name = value 格式,则其它所有参数都必须使用这种格式。默认情况下,参数可为空。如果传递 NULL 参数值,且该参数用于 CREATE 或 ALTER TABLE 语句中不允许为 NULL 的列(例如,插入至不允许为 NULL 的列),SQL Server 就会报错。为避免将 NULL 参数值传递给不允许为 NULL 的列,可以在过程中添加程序设计逻辑或采用默认值(使用 CREATE 或 ALTER TABLE 语句中的 DEFAULT 关键字)。value是过程中参数的值。如果参数名称没有指定,参数值必须以 CREATE PROCEDURE 语句中定义的顺序给出。如果参数值是一个对象名称、字符串或通过数据库名称或所有者名称进行限制,则整个名称必须用单引号括起来。如果参数值是一个关键字,则该关键字必须用双引号括起来。如果在 CREATE PROCEDURE 语句中定义了默认值,用户执行该过程时可以不必指定参数。如果该过程使用了带 LIKE 关键字的参数名称,则默认值必须是常量,并且可以包含 %、_、[ ] 及 [^] 通配符。默认值也可以为 NULL。通常,过程定义会指定当参数值为 NULL 时应该执行的操作。@variable是用来保存参数或者返回参数的变量。OUTPUT指定存储过程必须返回一个参数。该存储过程的匹配参数也必须由关键字 OUTPUT 创建。使用游标变量作参数时使用该关键字。如果使用 OUTPUT 参数,目的是在调用批处理或过程的其它语句中使用其返回值,则参数值必须作为变量传递(即 @parameter = @variable)。如果一个参数在 CREATE PROCEDURE 语句中不是定义为 OUTPUT 参数,则对该参数指定 OUTPUT 的过程不能执行。不能使用 OUTPUT 将常量传递给存储过程;返回参数需要变量名称。在执行过程之前,必须声明变量的数据类型并赋值。返回参数可以是 text 或 image 数据类型以外的任意数据类型。DEFAULT根据过程的定义,提供参数的默认值。当过程需要的参数值没有事先定义好的默认值,或缺少参数,或指定了 DEFAULT 关键字,就会出错。n是占位符,表示在它前面的项目可以多次重复执行。例如,EXECUTE 语句可以指定一个或者多个 @parameter、value 或 @variable。WITH RECOMPILE强制编译新的计划。如果所提供的参数为非典型参数或者数据有很大的改变,使用该选项。在以后的程序执行中使用更改过的计划。该选项不能用于扩展存储过程。建议尽量少使用该选项,因为它消耗较多系统资源。@string_variable是局部变量的名称。@string_variable 可以是 char、varchar、nchar 或 nvarchar 数据类型,最大值为服务器的可用内存。如果字符串长度超过 4,000 个字符,则把多个局部变量串联起来用于 EXECUTE 字符串。有关系统提供的 SQL Server 数据类型更多的信息,请参见数据类型。 [N]'tsql_string'是一个常量,tsql_string 可以是 nvarchar 或 varchar 数据类型。如果包含 N,则该字符串将解释为 nvarchar 数据类型,最大值为服务器的可用内存。如果字符串长度超过 4,000 个字符,则把多个局部变量串联起来用于 EXECUTE 字符串。
      

  2.   

    FETCH NEXT FROM topic_Cur INTO @TopicID 这句话为什么写了两遍? @@FETCH_STATUS=0 是什么意思?@@是代表触发器的意思么?
      

  3.   

    @@FETCH_STATUS
    返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。返回值   描述 
    0        FETCH语句成功。 
    -1       FETCH语句失败或此行不在结果集中。 
    -2       被提取的行不存在。