加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Execute in sqlserver

发布时间:2020-12-12 14:12:05 所属栏目:MsSql教程 来源:网络整理
导读: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
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.

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.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

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 information 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

Note:
?

Copy Code
    推荐文章
      热点阅读