SQL SERVER 视图

本文详细解析了SQL Server中视图的创建、删除、刷新等操作,包括如何使用CTE进行模块化开发,以及在视图中使用ORDER BY、EXISTS等关键语法。同时介绍了SQL Server 2005支持的CTE技术,为读者提供了一套高效、灵活的视图开发策略。

视图

SET NOCOUNT ON;

SET Northwind;

GO

IF OBJECT_ID('dbo.ViewName') IS NOT NULL

    DROP VIEW dbo.ViewName;

GO

CREATE VIEW dbo.Viewname

AS

SELECT * FROM customer AS C

WHERE EXISTS

    (SELECT * FROM dbo.Orders AS O

     WHERE O.CustomerID = C.Customerid);

GO

**************************我是分割线**************************

IF OBJECT_ID('abo.VSign') IS NOT NULL

    DROP VIEW ado.VSign;

GO

    CREATE VIEW ado.VSign

AS

    SELECT mnth, qty, SIGN((S1.qty-(SELECT TOP 1 qty FROM ado.Sales AS S2

                                                         WHERE S2.mnth < S1.mnth ORDER BY S2.mnth DESC))) AS sgn

    FROM ado.Sales AS S1

GO

************************** 我是分割线**************************

刷新视图

EXEC sp_refreshview 'dbo.V1';

 

SELECT NEXEC sp_refreshview QUOTENAME(VIEW_NAME, '');

 

SELECT NEXEC sp_refreshview QUOTENAME(VIEW_NAME, '"') AS cmd

FROM(SELECT QUOTENAME(TABLE_SCHEMA) N, QUOTENAME(TABLE_NAME) AS VIEW_NAME

          FROM INFORMATION_SCHEMA, VIEWS) AS V

WHERE OBJECT PROPERTY(OBJECT_ID(VIEW_NAME), 'IsSchemaBound') = 0;


视图中的ORDER BY(必须与TOP和FORXML一起使用)

注:不要依赖于视图的ORDER BY(2000可用,2005不可用)

EXISTS中的*可以用,只起统计作用。

SQLSERVER2005支持CTE,使用模块化方法开发。

************************** 我是分割线**************************

ALTER VIEW dbo.Vtrends

AS

WITH CsalesRN AS

(SELECT mnth, qty, ROW_NUMBER() OVER(ORDER BY mnth) AS RN

 FROM dbo.sales),

CSign AS

(SELECT Cur.mnth, Cur.qty, SIGN(Cur.qty - Prv.qty) AS Sign

 FROM CsalesRN AS Cur

 LEFT OUTER JOIN CsalesRN AS Prv ON Cur.rn = Prv.rn + 1),

CGrp AS

(SELECT mnth, sgn, DATEADD(month, ROW_NUMBER() OVER(PARTITION BY sign ORDER BY mnth), mnth) AS grp

FROM CSgn),

SELECT CONVERT(VARCHAR(6), MIN(mnth), 112) AS start

             CONVERT(VARCHAR(6), MIN(mnth), 112) AS end
             CASE Sign

                     WHEN -1 THEN 'down'

                     WHEN 0 THEN 'same'

                     WHEN 1 THEN 'up'

                     ELSE 'unknown'

             END AS trend

FROM CGrp

GROUP BY sgn, grp;

GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值