Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
语法 1 调用过程,它是 CALL 语句的替代方法,与 Adaptive Server Enterprise 兼容。语法 2 在 Transact-SQL 中执行预准备 SQL 语句。
[ EXECUTE ] | [ EXEC ][ @return_status = ] [creator.]procedure_name [ argument, ... ]
argument : [ @parameter-name = ] expression | [ @parameter-name = ] @variable [ output ]
EXECUTE ( string-expression )
语法 1 是为与 Transact-SQL 兼容而执行的。EXECUTE 调用存储过程,选择性地提供过程参数以及检索输出值和返回状态信息。在 Watcom SQL 中,使用 CALL 或 EXECUTE IMMEDIATE 语句。
若使用语法 2,则可在 Transact-SQL 存储过程和触发器内执行动态语句。EXECUTE 语句扩展了可以从过程和触发器内执行的语句的范围。它使您可以执行动态预准备语句,比如用传递到过程中的参数构造的语句。此语句中的字符串必须用单引号括起来,并且此语句必须位于一行上。执行 EXECUTE 语句的语法 2 是为了与 Transact-SQL 兼容,但其可以在 Transact-SQL 或 Watcom SQL 批处理和过程中使用。
Transact-SQL EXECUTE 语句无法表明需要结果集。指示 Transact-SQL 过程返回结果集的一种方法是包含类似下面的语句:
IF 1 = 0 THEN SELECT 1 AS a
也可以在 Transact-SQL 存储过程和触发器内执行语句。请参见EXECUTE IMMEDIATE 语句 [SP]。
必须是过程的所有者,具有过程的 EXECUTE 权限或者有 DBA 特权。
无。
SQL/2008 语法 1 是服务商扩充。语法 2 提供的功能与 SQL/2008 标准中的 EXECUTE IMMEDIATE 语句提供的功能相同,该语句是可选 SQL 语言功能 B031 "基本动态 SQL"。但是,语法 2 的语法不同于 SQL/2008 标准的语法。
下面的过程阐释了语法 1。
CREATE PROCEDURE p1( @var INTEGER = 54 ) AS PRINT 'on input @var = %1!', @var DECLARE @intvar integer SELECT @intvar=123 SELECT @var=@intvar PRINT 'on exit @var = %1!', @var;
以下语句使用参数输入值 23 执行过程。如果是从 Open Client 或 JDBC 应用程序连接,则 PRINT 消息显示在客户端窗口中。如果是从 ODBC 或嵌入式 SQL 应用程序连接,则消息显示在数据库服务器消息窗口中。
EXECUTE p1 23;
以下是另一种执行过程的方法,当有多个参数时该方法很有用。
EXECUTE p1 @var = 23;
以下语句使用参数的缺省值执行过程。
EXECUTE p1;
以下语句执行过程,并将返回值存储在用于检查状态的变量中。
EXECUTE @status = p1 23;