SQL2K와 SQL2K5의 공통점
12968 단어 oraclesqlSQL Server기업 응용Go
:
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/'
)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Control Version de una base de datos OraclePodemos는 Flyway y Liquibase의 새로운 기반 버전을 제어할 수 있는 프로젝트를 제안합니다. Dada la integración de SQLcl y Liquibase, este ejemplo nos...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.