定义一存储过程,都运行成功了,在更改的时候就让包错
错误提示:
错误21001:[SQL-DMO]存储过程定义必须包含名称和文本(对于标准StoredProcedure)或库名(对于扩展StoredProcedure)

解决方案 »

  1.   

    怎么改的
    是这样的方式?
    Alter Proc  过程名as
      

  2.   

    你这是使用DMO编程遇到的错误吧,其实错误里已经写得很清楚了。
    你可能参数使用上面,没有使用对,检查一下。
      

  3.   

    ALTER PROCEDURE
    更改先前通过执行 CREATE PROCEDURE 语句创建的过程,但不会更改权限,也不影响相关的存储过程或触发器。有关 ALTER PROCEDURE 语句所用参数的更多信息,请参见 CREATE PROCEDURE。 语法
    ALTER PROC [ EDURE ] procedure_name [ ; number ]
        [ { @parameter data_type }
            [ VARYING ] [ = default ] [ OUTPUT ]
        ] [ ,...n ] [ WITH
        { RECOMPILE | ENCRYPTION
            | RECOMPILE , ENCRYPTION
        } 
    ]
    [ FOR REPLICATION ] 
    AS
        sql_statement [ ...n ]参数
    procedure_name是要更改的过程的名称。过程名称必须符合标识符规则。;number是现有的可选整数,该整数用来对具有同一名称的过程进行分组,以便可以用一条 DROP PROCEDURE 语句全部除去它们。@parameter过程中的参数。 data_type是参数的数据类型。VARYING指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。default参数的默认值。OUTPUT表明参数是返回参数。n是表示最多可指定 2.100 个参数的占位符。{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}RECOMPILE 表明 Microsoft® SQL Server™ 不会高速缓存该过程的计划,该过程将在运行时重新编译。 ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 ALTER PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。说明  在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。
    FOR REPLICATION指定不能在订阅服务器上执行为复制创建的存储过程。使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用。AS过程将要执行的操作。sql_statement过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。有关更多信息,请参见 CREATE PROCEDURE 中的"sql_statement 限制"。 n是表示该过程中可以包含多条 Transact-SQL 语句的占位符。有关更多信息,请参见 CREATE PROCEDURE。注释
    有关 ALTER PROCEDURE的更多信息,参阅 CREATE PROCEDURE 中的注释。 说明  如果原来的过程定义是用 WITH ENCRYPTION 或 WITH RECOMPILE 创建的,那么只有在 ALTER PROCEDURE 中也包含这些选项时,这些选项才有效。
    权限
    ALTER PROCEDURE 权限默认授予 sysadmin 固定服务器角色成员、db_owner 和 db_ddladmin 固定数据库角色成员和过程的所有者且不可转让。用 ALTER PROCEDURE 更改的过程的权限和启动属性保持不变。示例
    下例创建称为 Oakland_authors 的过程,默认情况下,该过程包含所有来自加利福尼亚州奥克兰市的作者。随后授予了权限。然后,当该过程需更改为能够检索所有来自加利福尼亚州的作者时,用 ALTER PROCEDURE 重新定义了该存储过程。USE pubs
    GO
    IF EXISTS(SELECT name FROM sysobjects WHERE name = 'Oakland_authors' AND type = 'P')
       DROP PROCEDURE Oakland_authors
    GO
    -- Create a procedure from the authors table that contains author 
    -- information for those authors who live in Oakland, California.
    USE pubs
    GO
    CREATE PROCEDURE Oakland_authors
    AS 
    SELECT au_fname, au_lname, address, city, zip
    FROM pubs..authors
    WHERE city = 'Oakland'
    and state = 'CA'
    ORDER BY au_lname, au_fname
    GO
    -- Here is the statement to actually see the text of the procedure.
    SELECT o.id, c.text
    FROM sysobjects o INNER JOIN syscomments c ON o.id = c.id
    WHERE o.type = 'P' and o.name = 'Oakland_authors'
    -- Here, EXECUTE permissions are granted on the procedure to public.
    GRANT EXECUTE ON Oakland_authors TO public
    GO
    -- The procedure must be changed to include all
    -- authors from California, regardless of what city they live in.
    -- If ALTER PROCEDURE is not used but the procedure is dropped
    -- and then re-created, the above GRANT statement and any 
    -- other statements dealing with permissions that pertain to this 
    -- procedure must be re-entered.
    ALTER PROCEDURE Oakland_authors
    WITH ENCRYPTION
    AS 
    SELECT au_fname, au_lname, address, city, zip
    FROM pubs..authors
    WHERE state = 'CA'
    ORDER BY au_lname, au_fname
    GO
    -- Here is the statement to actually see the text of the procedure.
    SELECT o.id, c.text
    FROM sysobjects o INNER JOIN syscomments c ON o.id = c.id
    WHERE o.type = 'P' and o.name = 'Oakland_authors'
    GO
      

  4.   

    把创建的Create 改为Alter。
      

  5.   

    呵呵!问题有趣!就把 create  pro ...........
    修改成 alter pro............不就是修改存储过程吗?呵呵