sql execute的使用方法与实例教程

执行 Transact-SQL 批中的命令字符串、字符串或执行下列模块之一:系统存储过程、用户定义存储过程、标量值用户定义函数或扩展存储过程。

Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
    {
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var }
        [ [ @parameter = ] { value
                           | @variable [ OUTPUT ]
                           | [ DEFAULT ]
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]

Execute a character string
{ EXEC | EXECUTE }
        ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
    [ AS { LOGIN | USER } = ' name ' ]
[;]

Execute a pass-through command against a linked server
{ EXEC | EXECUTE }
        ( { @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ]
        [ { , { value | @variable [ OUTPUT ] } } [ ...n ] ]
        )
    [ AS { LOGIN | USER } = ' name ' ]
    [ AT linked_server_name ]
[;]

调用一个过程

3> -- Replace the default error message and numbers with my own:
4>
5> CREATE PROCEDURE spRunSQL
6>     @Statement VarChar(2000) -- Input param. accepts any SQL statement.
7> AS
8>     DECLARE   @StartTime DateTime
9>             , @EndTime DateTime
10>             , @ExecutionTime Int
11>             , @ErrNum Int
12>     SET @StartTime = GetDate()
13>     EXECUTE (@Statement)
14>     SET @ErrNum = @@Error
15>     IF @ErrNum = 207      -- Bad column
16>        RAISERROR 50001 'Bad column name'
17>     ELSE IF @ErrNum = 208     -- Bad object
18>        RAISERROR 50002 'Bad object name'
19>     ELSE IF @ErrNum = 0   -- No error. Resume.
20>        BEGIN
21>         SET @EndTime = GetDate()
22>         SET @ExecutionTime = DateDiff(MilliSecond, @StartTime, @EndTime)
23>         RETURN @ExecutionTime -- Return execution time in milliseconds
24>       END
25> GO
1>
2> EXEC spRunSQL 'select 1 GO'
3> GO
GO
-----------
          1
1>
2> EXEC spRunSQL 'selet 1 GO'
3> GO
Msg 102, Level 15, State 1, Server JAVA2SSQLEXPRESS, Line 1
Incorrect syntax near 'GO'.
1>
2>
3> drop procedure spRunSQL
4> GO
1>
2>

SQL Server 扩展了 EXECUTE 语句,以使其可用于向链接服务器发送传递命令。此外,还可以显式设置执行字符串或命令的上下文。看一个实例使用excute

> create table employee(
2>     ID          int,
3>     name        nvarchar (10),
4>     salary      int,
5>     start_date  datetime,
6>     city        nvarchar (10),
7>     region      char (1))
8> GO
1>
2> insert into employee (ID, name,    salary, start_date, city,       region
3>               values (1,  'Jason', 40420,  '02/01/94', 'New York', 'W')
4> GO

(1 rows affected)
1> insert into employee (ID, name,    salary, start_date, city,       region
2>               values (2,  'Robert',14420,  '01/02/95', 'Vancouver','N')
3> GO

(1 rows affected)
1> insert into employee (ID, name,    salary, start_date, city,       region
2>               values (3,  'Celia', 24020,  '12/03/96', 'Toronto',  'W')
3> GO

(1 rows affected)
1> insert into employee (ID, name,    salary, start_date, city,       region
2>               values (4,  'Linda', 40620,  '11/04/97', 'New York', 'N')
3> GO

(1 rows affected)
1> insert into employee (ID, name,    salary, start_date, city,       region
2>               values (5,  'David', 80026,  '10/05/98', 'Vancouver','W')
3> GO

(1 rows affected)
1> insert into employee (ID, name,    salary, start_date, city,       region
2>               values (6,  'James', 70060,  '09/06/99', 'Toronto',  'N')
3> GO

(1 rows affected)
1> insert into employee (ID, name,    salary, start_date, city,       region
2>               values (7,  'Alison',90620,  '08/07/00', 'New York', 'W')
3> GO

(1 rows affected)
1> insert into employee (ID, name,    salary, start_date, city,       region
2>               values (8,  'Chris', 26020,  '07/08/01', 'Vancouver','N')
3> GO

(1 rows affected)
1> insert into employee (ID, name,    salary, start_date, city,       region
2>               values (9,  'Mary',  60020,  '06/09/02', 'Toronto',  'W')
3> GO

(1 rows affected)
1>
2> select * from employee
3> GO
ID          name       salary      start_date              city       region
----------- ---------- ----------- ----------------------- ---------- ------
          1 Jason            40420 1994-02-01 00:00:00.000 New York   W
          2 Robert           14420 1995-01-02 00:00:00.000 Vancouver  N
          3 Celia            24020 1996-12-03 00:00:00.000 Toronto    W
          4 Linda            40620 1997-11-04 00:00:00.000 New York   N
          5 David            80026 1998-10-05 00:00:00.000 Vancouver  W
          6 James            70060 1999-09-06 00:00:00.000 Toronto    N
          7 Alison           90620 2000-08-07 00:00:00.000 New York   W
          8 Chris            26020 2001-07-08 00:00:00.000 Vancouver  N
          9 Mary             60020 2002-06-09 00:00:00.000 Toronto    W

(9 rows affected)
1>
2> -- example to execute the store procedure - valid
3>
4> IF EXISTS (SELECT name
5>       FROM   sysobjects
6>       WHERE  name = N'sp_Output_Salary'
7>       AND      type = 'P')
8>     DROP PROCEDURE sp_Output_Salary
9> GO
1>
2> CREATE PROCEDURE sp_Output_Salary
3>    @ID int,
4>    @OutSalary money OUTPUT
5> AS
6>    SELECT @OutSalary = salary
7>       FROM employee
8>       WHERE Id = @ID
9>
10>    IF @@ROWCOUNT = 1
11>       RETURN
12>    SET @OutSalary = 0
13>    RETURN 1
14> GO
1>
2>
3> GRANT EXECUTE ON sp_Output_Salary TO PUBLIC
4> GO
1>
2>
3> DECLARE @myMoney money
4> DECLARE @Ret_Status int
5> EXECUTE @Ret_Status = sp_Output_Salary 1, @myMoney OUTPUT
6> SELECT @myMoney
7> SELECT @Ret_Status
8> GO

---------------------
           40420.0000

(1 rows affected)

-----------
          0

(1 rows affected)
1>
2> drop table employee
3> GO
1>

注:

运行 EXECUTE 语句无需权限。但是,需要对 EXECUTE 字符串内引用的安全对象具有权限。例如,如果字符串包含 INSERT 语句,则 EXECUTE 语句的调用方对目标表必须具有 INSERT 权限。在遇到 EXECUTE 语句时,即使 EXECUTE 语句包含于模块内,也将检查权限。

模块的 EXECUTE 权限默认授予该模块的所有者,该所有者可以将此权限转让给其他用户。当运行一个执行字符串的模块时,系统会在执行该模块的用户上下文中而不是在创建该模块的用户上下文中检查权限。但是,如果同一用户拥有调用模块和被调用模块,则不对后者执行 EXECUTE 权限检查

如果模块访问其他数据库教程对象,则当拥有对该模块的 EXECUTE 权限并且以下任一情况存在时,执行将成功:

模块被标记为 EXECUTE AS USER 或 SELF,并且模块所有者对被引用对象具有相应权限。

模块被标记为 EXECUTE AS CALLER,并且您对对象具有相应权限。

模块被标记为 EXECUTE AS user_name,并且 user_name 对对象具有相应权限。

上下文切换权限
若要对某登录名指定 EXECUTE AS,调用方必须具有对所指定登录名的 IMPERSONATE 权限。若要对某数据库用户指定 EXECUTE AS,调用方必须具有对所指定用户名的 IMPERSONATE 权限。如果未指定执行上下文或指定了 EXECUTE AS CALLER,则无需 IMPERSONATE 权限。

时间: 2024-10-27 07:28:13

sql execute的使用方法与实例教程的相关文章

js数组使用方法与实例教程

js数组使用方法与实例教程 定义数组 数组对象用来在单独的变量名中存储一系列的值. 我们使用关键词 new 来创建数组对象.下面的代码定义了一个名为 myArray 的数组对象: var myArray=new Array()有两种向数组赋值的方法(你可以添加任意多的值,就像你可以定义你需要的任意多的变量一样). 1: var mycars=new Array() mycars[0]="Saab" mycars[1]="Volvo" mycars[2]="

js教程:JavaScript For...In 方法及实例教程

js教程:JavaScript For...In 方法及实例教程 在为...在一份声明中是用来循环(重复)通过要素的一个数组,或通过性能的一个对象. 范例 对于在声明中... 如何使用的...在一份声明中循环的要素一个数组. <html> <body> <script type="text/javascript"> var x; var mycars = new Array(); mycars[0] = "Saab"; mycar

sql join left联合关联查询实例教程

sql join left联合关联查询实例教程 a表: 结果与数据 studentID  workID  store 1            1      98 1            2      95 2            1      90 2            3      80 b表: 结果与数据 workID  workName  1        zuoye 2        www.111cn.net 3        wenti 我们要用join left联合查询结

ASP Clear 方法使用实例教程

ASP Clear 方法使用实例教程 Clear 方法清除任何缓冲的HTML输出. 注意:此方法不明确的回应标题,只有身体的反应. 注意:如果response.Buffer是虚假的,这种方法将导致运行时错误. 语法 response.Clear 看个实例. <% response.Buffer=true %> <html> <body> <p>这是一些文字我要发送给用户. </p> <p>不,我改变了主意.我想明确的文字. </

ASP BinaryWrite 方法使用实例教程

ASP BinaryWrite 方法使用实例教程 BinaryWrite方法的数据直接写入到输出没有任何性质的转换. 提示:这种方法是用来撰写图像数据(的BLOB )由一个数据库,一个浏览器. 语法 response.BinaryWrite data Parameter Description data Required. The binary information to be sent 如果你有一个对象,产生了一系列的字节,您可以使用BinaryWrite发送字节的申请: <% Set ob

jQuery.post 方法与实例教程

jquery.post( url, [ data ], [ success(data, textstatus, xmlhttprequest) ], [ datatype ] ) returns: xmlhttprequest jquery.post( url, [ data ], [ success(data, textstatus, xmlhttprequest) ], [ datatype ] ) 乌拉字符串,其中包含的url的请求被发送. dataa地图或字符串,发送到服务器的请求. s

SQL Server 2008 全文索引页面搜索实例教程

最近要开发一个类似搜索引擎的检索,在一个100万的表中通过关键字对一个大型字符字段进行查询,查询出所有包含关键字的数据并进行分页处理,并且将匹配度最高的数据排在第一位,要求查询响应时间控制在1秒左右.这么大的数据量要在短时间内响应,我们采用SQL Server 2008 全文索引. 测试环境:SQL Server 2008 r2 全文索引概念 全文索引是针对数据表,只能对表创建全文索引,不能对数据库创建全文索引. 每个数据库可以不包含全文目录或包含多个全文目录,一个全文目录可以包含多个全文索引,

this在Java中的使用 方法与实例教程

1.this是指当前对象自己. 当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用.如下面这个例子中: publicclassA{ Strings="Hello"; publicA(Strings){ System.out.println("s="+s); System.out.println("1->this.s="+this.s); this.s=s; System.out.println("2->

php 错误处理与异常处理方法与实例教程(1/2)

  1.内置异常处理类.   2.捕获并处理异常的示例.   3.exception类的成员函数getmessage().   4.exception类的成员函数getfile().   5.exception类的成员函数getline().   6.显示警告或错误信息.   7.自定义错误处理函数. */  // 1.内置异常处理类.  代码如下 复制代码  class exception {     protected $message = 'unknown exception';   //