微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Execute in sqlserver

Using EXECUTE with Stored Procedures
You do not have to specify the EXECUTE keyword when you execute stored procedures when the statement is the first one in a batch. 


sql Server system stored procedures start with the characters sp_. They are physically stored in the Resource database,but logically appear in the sys schema of every system and user-defined database. When you execute a system stored procedure,either in a batch or inside a module such as a user-defined stored procedure or function,we recommend that you qualify the stored procedure name with the sys schema name. 


sql Server system extended stored procedures start with the characters xp_,and these are contained in the dbo schema of the master database. When you execute a system extended stored procedure,we recommend that you qualify the stored procedure name with master.dbo. 


When you execute a user-defined stored procedure,we recommend that you qualify the stored procedure name with a schema name. We do not recommend that you name a user-defined stored procedure with the same name as a system stored procedure. For more @R_720_4045@ion about executing stored procedures,see Executing Stored Procedures (Database Engine).


USE AdventureWorks2008R2;
GO
DECLARE tables_cursor CURSOR
   FOR
   SELECT s.name,t.name 
   FROM sys.objects AS t
   JOIN sys.schemas AS s ON s.schema_id = t.schema_id
   WHERE t.type = 'U';
OPEN tables_cursor;
DECLARE @schemaname sysname;
DECLARE @tablename sysname;
FETCH NEXT FROM tables_cursor INTO @schemaname,@tablename;
WHILE (@@FETCH_STATUS <> -1)
BEGIN;
   EXECUTE ('ALTER INDEX ALL ON ' + @schemaname + '.' + @tablename + ' REBUILD;');
   FETCH NEXT FROM tables_cursor INTO @schemaname,@tablename;
END;
PRINT 'The indexes on all tables have been rebuilt.';
CLOSE tables_cursor;
DEALLOCATE tables_cursor;
GO


IF OBJECT_ID(N'dbo.ProcTestDefaults',N'P')IS NOT NULL
   DROP PROCEDURE dbo.ProcTestDefaults;
GO
-- Create the stored procedure.
CREATE PROCEDURE dbo.ProcTestDefaults (
@p1 smallint = 42, 
@p2 char(1), 
@p3 varchar(8) = 'CAR')
AS 
   SET NOCOUNT ON;
   SELECT @p1,@p2,@p3
;
GO


exec sp_addlinkedserver 
@server = 'ORACLE',
@srvProduct = 'Oracle',
@provider = 'OraOLEDB.Oracle',
@datasrc = 'ORACLE10';


exec sp_addlinkedsrvlogin
@rmtsrvname = 'ORACLE',
@useself = 'false',
@locallogin = null,
@rmtuser = 'Scott',
@rmtpassword = 'tiger';
exec sp_serveroption 'ORACLE','rpc out',true;
go
exec('select * from scott.emp') at ORACLE;
go
exec('select * from scott.emp where MGR = ?',7902) at ORACLE;
go
declare @v int;
set @v = 7902;
exec('select * from scott.emp where mgr = ?',@v) at ORACLE;

go


Executing a dynamically built string

The following example shows using sp_executesql to execute a dynamically built string. The example stored procedure is used to insert data into a set of tables that are used to partition sales data for a year. There is one table for each month of the year that has the following format:

 

copy Code
CREATE TABLE May1998Sales
    (OrderID int PRIMARY KEY,CustomerID int NOT NULL,OrderDate  datetime NULL
        CHECK (DATEPART(yy,OrderDate) = 1998),OrderMonth int
        CHECK (OrderMonth = 5),DeliveryDate datetime  NULL,CHECK (DATEPART(mm,OrderDate) = OrderMonth)
    )

This sample stored procedure dynamically builds and executes an INSERT statement to insert new orders into the correct table. The example uses the order date to build the name of the table that should contain the data,and then incorporates that name into an INSERT statement.

Note:
This is a simple example for sp_executesql. The example does not contain error checking and does not include checks for business rules,such as guaranteeing that order numbers are not duplicated between tables.

 

copy Code
CREATE PROCEDURE InsertSales @PrmOrderID INT,@PrmCustomerID INT,@PrmOrderDate DATETIME,@PrmDeliveryDate DATETIME
AS
DECLARE @InsertString NVARCHAR(500)
DECLARE @OrderMonth INT

-- Build the INSERT statement.
SET @InsertString = 'INSERT INTO ' +
       /* Build the name of the table. */
       SUBSTRING( DATENAME(mm,@PrmOrderDate),1,3) +
       CAST(DATEPART(yy,@PrmOrderDate) AS CHAR(4) ) +
       'Sales' +
       /* Build a VALUES clause. */
       ' VALUES (@InsOrderID,@InsCustID,@InsOrdDate,' +
       ' @InsOrdMonth,@InsDelDate)'

/* Set the value to use for the order month because
   functions are not allowed in the sp_executesql parameter
   list. */
SET @OrderMonth = DATEPART(mm,@PrmOrderDate)

EXEC sp_executesql @InsertString,N'@InsOrderID INT,@InsCustID INT,@InsOrdDate DATETIME,@InsOrdMonth INT,@InsDelDate DATETIME',@PrmOrderID,@PrmCustomerID,@PrmOrderDate,@OrderMonth,@PrmDeliveryDate

GO

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐