SQL2K와 SQL2K5의 공통점


  :
     sql 2k  sql 2005      ,     !! 
  SQL SERVER 2005  SQL SERVER 2000  

       ,          ,            !       SQL SERVER 2005     ,  sql server 2005            .net ,           !               ,            ”Microsoft SQL Server Management studio” ,         80M (   sql server      80M, 160M ),           20M  ,  sql server      10M    30M .     ~!

hacker at 2006/9/29
 、       
1、    。
SQL Server 2005            MAX     。  VARCHAR,NVARCHAR VARBINARY     ,            8000    。MAX      2GB   , TEXT IMAGE  。
          CLOB      。        varchar char        。      varchar   ,           ?           ?             。
    
Sql server2000 Sql server2005
text   2GB varchar(max)   2GB(   oracle  CLOB  )
ntext   2GB nvarchar(max)   2GB
image   2GB varbinary(max)   2GB(  image  SQL Server           )
  XML XML              (BLOB)      ,             
          。
2、         
           SET NULL   SET DEFAULT   ,           。(   oracle )    (  sql server 2005 help   ):
CREATE TABLE   ALTER TABLE     REFERENCES      ON DELETE   ON UPDATE   : 
• [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
• [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
       ON DELETE   ON UPDATE,     NO ACTION。 
NO ACTION 
        /     ,                    ,         DELETE/UPDATE  。
CASCADE、SET NULL   SET DEFAULT 
                        ,                   。                ,                       。      timestamp           CASCADE。 
ON DELETE CASCADE 
           ,                    ,               。 
ON UPDATE CASCADE 
               ,                     ,                      。 (   timestamp              ,      CASCADE。 )
ON DELETE SET NULL
           ,                    ,                     NULL。               ,       。
ON DELETE SET NULL
           ,                    ,                     NULL。               ,       。
ON DELETE SET DEFAULT
           ,                    ,                          。                  ,       。         ,           ,     NULL           。  ON DELETE SET DEFAULT                     ,            。
ON UPDATE SET DEFAULT
           ,                    ,                          。                  ,       。         ,           ,     NULL           。  ON UPDATE SET DEFAULT                     ,            。


3、      
                    ,          。                  ,                    。               30%     。 :
CREATE INDEX ix_CustomerPostalcode 
On Sales.Customer(PostalCode) 
INCLUDE (AddressLine1,AddressLine2,City)
       (select)     ,           INSERT、UPDATE   DELETE      ,           ,             。
4、        
                。          ,        。  SQL2005           ,          ,     insert update   。OLTP  。OLAP       。 
   ORDER                        ID     
select identity(int,1,1) ID ,hymc into #temp 
from hybm 
order by hymc 
( :  ORACLE ,  : select rownum from USERTABLE order by USERNAME;    rownum         ROWNUM,          ROWNUM。    ,   ORDER BY   。)
5、   
       !               SQL Server   。    ,      。        :   SQL Server2005  ,         。               。                       。         ,               。   function->schema->table ,                        ,            。        。                   ,         !       ,          。         bug。       。
                 。      ,             (  )              。               ,              。          ,           ,    。(500       10%  )
6、CLR  
   CLR        ,             .net   。         ,                 。       ,    CLR                   ,           !       !           ,                    !
         ,Oracle            java  ,     java           。              java    ?! Oracle           ?!        !               !
    CLR                               。          ,                 。           Socket     。      !
7、    
    2k  。  2005            schema.viewname               。                        。
8、       
              SQL Server          。               。     ,            。                     ,    !
9、     
     ,                              。    Oracle10g            。  !
  :
CREATE DATABASE demo2
GO
USE demo2
ALTER DATABASE demo2 SET allow_snapshot_isolation ON --      
CREATE TABLE test
( 
tid INT NOT NULL primary key,
tname VARCHAR(50) NOT NULL
)
INSERT INTO test VALUES(1,'version1')
INSERT INTO test VALUES(2,'version2')

--   

USE demo2
BEGIN TRAN
UPDATE test SET tname='version3' WHERE tid=2
SELECT * FROM test

--   
USE demo2
SET transaction isolation level snapshot
SELECT * FROM test

10、Mirror
Mirror    SQL Server Data guard 。             ,                   .                 。
 、    
    :http://www.microsoft.com/china/msdn/library/data/sqlserver/05TSQLEnhance.mspx?mfr=true
1、Ranking   
         row_number 。                   ,  SQL Server2005 row_number Oracle    。    Order by      ,   Oracle            。        。

      :
USE demo
GO
CREATE TABLE rankorder
(
orderid INT,
qty INT
)
GO
INSERT rankorder VALUES(30001,10)
INSERT rankorder VALUES(10001,10)
INSERT rankorder VALUES(10006,10)
INSERT rankorder VALUES(40005,10)
INSERT rankorder VALUES(30003,15)
INSERT rankorder VALUES(30004,20)
INSERT rankorder VALUES(20002,20)
INSERT rankorder VALUES(20001,20)
INSERT rankorder VALUES(10005,30)
INSERT rankorder VALUES(30007,30)
INSERT rankorder VALUES(40001,40)
GO
SELECT orderid,qty,
ROW_NUMBER() OVER(ORDER BY qty) AS rownumber,
RANK() OVER(ORDER BY qty) AS rank,
DENSE_RANK() OVER(ORDER BY qty) AS denserank 
FROM rankorder
ORDER BY qty
       :
select ROW_NUMBER() OVER (order by aa)
from tbl
order by bb
    aa   ,     bb   。
            order by,      ranking  ,Order by     。    Order by     ,   order by         ,       order by   (          )。
2、top
           ,                 ,               。   DELETE、UPDATE INSERT     TOP  。        ,     SQL   。
 :
--     
DECLARE @a INT 
DECLARE @b INT
DECLARE @c INT

--  
SET @a = 10
SET @b = 5
SELECT @c = @a/@b

--       
SELECT TOP(@c) * FROM toptest
--  SELECT      
SELECT TOP(SELECT COUNT(*) FROM toptest2) * 
FROM toptest

--  top
DELETE TOP(2) toptest where column1>'t6'

--  top
UPDATE TOP(2) toptest SET column1 = 'hi' where column1<='t2'

3、Apply
            。
CROSS APPLY :    FUNCTION         
OUTER APPLY: All rows , regardless of matching function results 
         :
USE demo
GO
CREATE TABLE Arrays
(
aid INT NOT NULL IDENTITY PRIMARY KEY,
array VARCHAR(7999) NOT NULL
)
GO
INSERT INTO Arrays VALUES('')
INSERT INTO Arrays VALUES('10')
INSERT INTO Arrays VALUES('20,40,30')
INSERT INTO Arrays VALUES('-1,-3,-5')
GO
CREATE FUNCTION function1(@arr AS VARCHAR(7999))
RETURNS @t TABLE(pos INT NOT NULL, value INT NOT NULL)
AS
BEGIN
DECLARE @end AS INT, @start AS INT, @pos AS INT
SELECT @arr = @arr + ',', @pos = 1,
@start = 1, @end = CHARINDEX(',', @arr, @start)
WHILE @end > 1
BEGIN
INSERT INTO @t VALUES(@pos, SUBSTRING(@arr, @start, @end - @start))
SELECT @pos = @pos + 1,
@start = @end + 1, @end = CHARINDEX(',', @arr, @start)
END
RETURN
END

--  
SELECT * FROM function1('200,400,300')
GO

SELECT A.aid, F.*
FROM Arrays AS A
CROSS APPLY function1(array) AS F
GO
SELECT A.aid, F.*
FROM Arrays AS A
OUTER APPLY function1(array) AS F
GO
    :


4、CTE(Common Table Expression      )
                       ,   WITH    。 :
WITH SalesCTE(ProductID,SalesOrderID) 
AS 
(SELECT ProductID,COUNT(SalesOrderid) 
FROM Sales.SalesOrderDetail GROUP BY ProductID) 
SELECT * FROM SalesCTE
5、try/catch
           :
BEGIN TRAN[SACTION] [transaction_name]
COMMIT [TRAN[SACTION]] [transaction_name]
ROLLBACK [TRAN[SACTION] [transaction_name]
SAVE TRAN[SACTION] [savepoint_name]
           ,    SET XACT_ABORT ON/OFF,  SET XACT_ABORT   ON  ,   Transact-SQL          ,          。  OFF  ,         Transact-SQL   ,          。   sql server 2k        SET XACT_ABORT ON       。  try/catch sql server2005      !!        。

USE demo
GO 
CREATE TABLE student --     
( stuid INT NOT NULL PRIMARY KEY,
stuname VARCHAR(50) )
CREATE TABLE score 
( stuid INT NOT NULL REFERENCES student(stuid),
score INT )
GO
INSERT INTO student VALUES (101,'zhangsan') 
INSERT INTO student VALUES (102,'wangwu') 
INSERT INTO student VALUES (103,'lishi') 
INSERT INTO student VALUES (104,'maliu') 
2K       2005   TRY...CATCH           
--         
SET XACT_ABORT ON(  OFF       )
BEGIN TRAN
INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78) 
INSERT INTO score VALUES (107,76) /*    */ 
INSERT INTO score VALUES (103,81) 
INSERT INTO score VALUES (104,65) 
COMMIT TRAN
GO
SET XACT_ABORT OFF
BEGIN TRY
BEGIN TRAN
INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78) 
INSERT INTO score VALUES (107,76) /*    */ 
INSERT INTO score VALUES (103,81) 
INSERT INTO score VALUES (104,65) 
COMMIT TRAN
PRINT '    '
END TRY
BEGIN CATCH
ROLLBACK
PRINT '    '
SELECT ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() as ErrorState,
ERROR_MESSAGE() as ErrorMessage;
END CATCH
GO

6、pivot/unpivot
      。2K       case  ,      case   。         (     )  group by            。(       ) 
7、OUTPUT    
                   insert into … values   ,  output              ,                      。 :
DECLARE @InsertDetails TABLE (ProductID int, Insertedby sysname) 
INSERT INTO Stock.ProductList 
OUTPUT inserted.ProductID, suser_name() INTO @InsertDetails 
VALUES (‘Racing Bike’,412.99)


------------------------------------

sql2005      
1. TOP     
SQL Server 2000 TOP     ,       ,     。 

-- n    
declare @n int 
set @n = 10 
select TOP(@n) * from Orders

2.    
       SQL Server 2000      ,         。SQL Server 2005        ,         。


-- Freight      , 20 30     
select * from( 
    select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders 
) a 
where row between 20 and 30

3.    

select * from( 
    select OrderId, Freight, RANK() OVER(order by Freight) as rank from Orders 
) a 
where rank between 20 and 30

4. try ... catch 
SQL Server 2000    ,T-SQL          ,     try catch   ,2005       :


SET XACT_ABORT ON  --    try   
BEGIN TRY 
    begin tran 
        insert into Orders(CustomerId) values(-1) 
    commit tran 
    print 'commited' 
END TRY 
BEGIN CATCH 
    rollback     
    print 'rolled back' 
END CATCH

5.      CTE 
                   。


--  :            
WITH OrderFreight AS( 
    select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders 
) 
select OrderId, Freight from OrderFreight where row between 10 and 20
  ,          。


6.     Web Service 
   store procedure  Web Service     ,.NET, IIS    ,  Windows 2003 HTTP Protocol Stack    WebService,       Windows 2003 sp1

--DataSet CustOrdersOrders(string customerID) 
CREATE ENDPOINT Orders_Endpoint 
state=started 
as http( 
     path='/sql/orders', 
     AUTHENTICATION=(INTEGRATED), 
     ports=(clear) 
) 
for soap( 
     WebMethod 'CustOrdersOrders'(    
         name='Northwind.dbo.CustOrdersOrders' 
     ), 
     
     wsdl=default, 
    database='Northwind', 
     namespace='http://mysite.org/' 
) 

좋은 웹페이지 즐겨찾기