Hiển thị các bài đăng có nhãn SQL 2005. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn SQL 2005. Hiển thị tất cả bài đăng

Thứ Ba, 2 tháng 11, 2010

Create maintenance plan failed

When you create a new maintenance plan that runs on a schedule in Microsoft SQL Server 2005, you may receive the following error message:
Create maintenance plan failed.

Additional information:
Create failed for JobStep 'Subplan'. (Microsoft.SqlServer.MaintenancePlanTasks)

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

The specified '@subsystem' is invalid (valid values are returned by sp_enum_sqlagent_subsystems). (Microsoft SQL Server, Error 14234)
This behavior may occur when you create the maintenance plan manually or by using the Maintenance Plan Wizard.

========================================

To resolve this behavior, install the Integration Services service from the SQL Server 2005 CD. To do this, follow these steps:
  1. Run the SQL Server Installation Wizard.
  2. On the System Configuration Check page, click Next after the scan is complete.
  3. In the Name box and in the Company box, enter the appropriate information, and then click Next.
  4. Click to select the Integration Services check box, and then click Next.
  5. Click Next, and then click Install.
  6. When the installation is complete, click Next, and then click Finish.

Enabling "Agent XPs" on SQL 2005

Chances are that if you have just done a fresh install of SQL 2005 you will get an error when you try to create your first SQL 2005 maintenance plan. This error tells you that the “‘Agent XPs component is turned off as part of the security configuration for this server” and refers you to your system administrator or the SQL Books Online.

In order to enable the “Agent XPs” component. Start up SQL Management Studio and click the “New Query” button on the tool bar. Execute the following script in the query window (on the right hand side of the screen) .

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Agent XPs', 1;
GO
RECONFIGURE
GO
This SQL script enables the advanced configuration options then turns on the “Agent XPs” component.
You are now free to create your SQL 2005 Maintenance plans.

Thứ Hai, 19 tháng 10, 2009

How to: Change Server Authentication Mode

The sa login can only connect to the server by using SQL Server Authentication.

  1. In SQL Server Management Studio Object Explorer, right-click the server, and then click Properties.

  2. On the Security page, under Server authentication, select the new server authentication mode, and then click OK.

  3. In the SQL Server Management Studio dialog box, click OK to acknowledge the requirement to restart SQL Server.

  1. In Object Explorer, right-click your server, and then click Restart. If SQL Server Agent is running, it must also be restarted.

  1. Execute the following statements to enable the sa password and assign a password.

    ALTER LOGIN sa ENABLE ;
    GO
    ALTER LOGIN sa WITH PASSWORD = '' ;
    GO
  1. In Object Explorer, expand Security, expand Logins, right-click sa, and then click Properties.

  2. On the General page, you might have to create and confirm a password for the sa login.

  3. On the Status page, in the Login section, click Enabled, and then click OK.

Thứ Năm, 18 tháng 6, 2009

Remove duplicate rows from a table in SQL Server

1. Select ra các dòng bị trùng (duplicate primary key values)

SELECT col1, col2, count(*)

FROM t1

GROUP BY col1, col2

HAVING count(*) > 1


2. Đổ vào 1 bảng tạm holdkey

SELECT col1, col2, col3=count(*)

INTO holdkey

FROM t1

GROUP BY col1, col2

HAVING count(*) > 1


3. Giữ lại 1 giá trị của các dòng bị trùng, bằng SELECT DISTINCT và đổ vào table holddups.

SELECT DISTINCT t1.*

INTO holddups

FROM t1, holdkey

WHERE t1.col1 = holdkey.col1

AND t1.col2 = holdkey.col2


4.
DELETE tất cả các dòng bị trùng

DELETE t1

FROM t1, holdkey

WHERE t1.col1 = holdkey.col1

AND t1.col2 = holdkey.col2


5. Đổ ngược lại dòng được giữ trong holddups.

INSERT t1 SELECT * FROM holddups

Thứ Sáu, 17 tháng 4, 2009

Các kiểu dữ liệu của SQL & VB

Các kiểu dữ liệu cơ sở :


SQL

Data Types

Description

bigint

Integer data from -2^63 through 2^63-1

int

Integer data from -2^31 through 2^31 - 1

smallint

Integer data from -2^15 through 2^15 - 1

tinyint

Integer data from 0 through 255

bit

Integer data with either a 1 or 0 value

decimal

Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1

numeric

Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1

money

Monetary data values from -2^63 through 2^63 - 1

smallmoney

Monetary data values from -214,748.3648 through +214,748.3647

float

Floating precision number data from -1.79E + 308 through 1.79E + 308

real

Floating precision number data from -3.40E + 38 through 3.40E + 38

datetime

Date and time data from January 1, 1753, through December 31, 9999,
with an accuracy of 3.33 milliseconds

smalldatetime

Date and time data from January 1, 1900, through June 6, 2079,
with an accuracy of one minute

char

Fixed-length character data with a maximum length of 8,000 characters

varchar

Variable-length data with a maximum of 8,000 characters

text

Variable-length data with a maximum length of 2^31 - 1 characters

nchar

Fixed-length Unicode data with a maximum length of 4,000 characters

nvarchar

Variable-length Unicode data with a maximum length of 4,000 characters

ntext

Variable-length Unicode data with a maximum length of 2^30 - 1 characters

binary

Fixed-length binary data with a maximum length of 8,000 bytes

varbinary

Variable-length binary data with a maximum length of 8,000 bytes

image

Variable-length binary data with a maximum length of 2^31 - 1 bytes

cursor

A reference to a cursor

sql_variant

A data type that stores values of various data types,
except text, ntext, timestamp, and sql_variant

table

A special data type used to store a result set for later processing

timestamp

A database-wide unique number that gets updated every time
a row gets updated

uniqueidentifier

A globally unique identifier


Visual Basic

Kiểu dữ liệu

Mô tả

Boolean

Gồm 2 giá trị: TRUE & FALSE.

Byte

Các giá trị số nguyên từ 0 – 255

Integer

Các giá trị số nguyên từ -32768 – 32767

Long

Các giá trị số nguyên từ -2147483648 – 2147483647. Kiểu dữ liệu này thường được gọi là số nguyên dài.

Single

Các giá trị số thực từ -3.402823E+38 – 3.402823E+38. Kiểu dữ liệu này còn được gọi là độ chính xác đơn.

Double

Các giá trị số thực từ -1.79769313486232E+308 - 1.79769313486232E+308. Kiểu dữ liệu này được gọi là độ chính xác kép.

Currency

Dữ liệu tiền tệ chứa các giá trị số từ -922.337.203.685.477,5808 - 922.337.203.685.477,5807.

String

Chuỗi dữ liệu từ 0 đến 65.500 ký tự hay ký số, thậm chí là các giá trị đặc biệt như ^%@. Giá trị kiểu chuỗi được đặt giữa 2 dấu ngoặc kép (“”).

Date

Dữ liệu kiểu ngày tháng, giá trị được đặt giữa cặp dấu ##. Việc định dạng hiển thị tùy thuộc vào việc thiết lập trong Control Panel.

Variant

Chứa mọi giá trị của các kiểu dữ liệu khác, kể cả mảng.

Query to Display Foreign Key Relationships and Name of the Constraint for Each Table in Database

SELECT

K_Table = FK.TABLE_NAME,

FK_Column = CU.COLUMN_NAME,

PK_Table = PK.TABLE_NAME,

PK_Column = PT.COLUMN_NAME,

Constraint_Name = C.CONSTRAINT_NAME

FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C

INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME

INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME

INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME

INNER JOIN (

SELECT i1.TABLE_NAME, i2.COLUMN_NAME

FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1

INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME

WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'

) PT ON PT.TABLE_NAME = PK.TABLE_NAME

-- optional:

ORDER BY

1,2,3,4

WHERE PK.TABLE_NAME='something'WHERE FK.TABLE_NAME='something'

WHERE PK.TABLE_NAME IN ('one_thing', 'another')

WHERE FK.TABLE_NAME IN ('one_thing', 'another')



HOẶC

SELECT object_name(constid) FKey_Name, object_name(fkeyid) Child_Table, c1.name FKey_Col, object_name(rkeyid) Parent_Table, c2.name Ref_KeyCol

FROM

sysforeignkeys s

inner join syscolumns c1

on ( s.fkeyid = c1.id and s.fkey = c1.colid )

inner join syscolumns c2

on ( s.rkeyid = c2.id and s.rkey = c2.colid )

Thứ Năm, 26 tháng 3, 2009

Delete All Procedures

Alter Procedure dbo.DeleteAllProcedures

As

declare @procName varchar(500)

declare cur cursor

for select [name] from sys.objects where type = 'p'

open cur

fetch next from cur into @procName

while @@fetch_status = 0

begin

if @procName <> 'DeleteAllProcedures'

exec('drop procedure ' + @procName)

fetch next from cur into @procName

end

close cur

deallocate cur

Go

Grant Execute On dbo.DeleteAllProcedures To Public

Go



================== Cách 2 ======================



Select 'Drop Procedure ' + name from sys.procedures Where [type] = 'P'

and is_ms_shipped = 0 and [name] not like 'sp[_]%diagram%'




What you'll get is a nice list of "Drop Procedure" statements that you can paste into the query editor window and execute.

Thứ Ba, 25 tháng 11, 2008

Cannot Create Database Diagram with SQL Server 2005

TITLE: Microsoft SQL Server Management Studio

——————————

Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.

——————————

BUTTONS:

OK

He asked me to find the solution and I found it. So I am putting it here. So you don’t have to struggle for it.

SOLUTION:

  1. Just copy below SP and copy it to Management studio

EXEC sp_dbcmptlevel , ‘90′;

go

ALTER AUTHORIZATION ON DATABASE::db_name TO [login_name]

go

use []

go

EXECUTE AS USER = N‘dbo’ REVERT

Go

  1. Now just change to your Database name for which you are facing problem and with your username of SQL.
  2. Now Try it!!! And Enjoy
---------------------------------------------------------------------------

The other method is:

In SQL Server Management Studio do the following:

1. Right Click on your database, choose properties
2. Goto the Options Page
3. In the Dropdown at right labeled "Compatibility Level" choose "SQL Server 2005(90)"
4. Goto the Files Page
5. Enter "sa" in the owner textbox.
6. Click OK button

Happy Database Diagramming


Thứ Hai, 13 tháng 10, 2008

Định dạng chữ số trong sql: 0000000064

Để có được chuỗi số theo 1 định dạng nào đó, ví dụ ở đây là số 64, chuỗi có tất cả 10 ký tự

Format như sau:

SELECT RIGHT(REPLICATE('0',10) + RIGHT(64,5),8)

Dùng hàm REPLICATE('0',10) để tạo chuỗi tái tạo 10 chữ số ‘0’ : 0000000000

Chuỗi tái tạo này bị ghi chồng lên tối đa 5 ký tự số phía sau RIGHT(64,5) : 00064

Chuỗi có được sẽ hợp 2 chuỗi trên lại là: 0000000064

Số 8 cuối cùng có nghĩa là sẽ lấy ra bao nhiêu ký tự của chuỗi đã hợp lại trên: kết quả là 00000064

Thứ Ba, 26 tháng 8, 2008

Các kiểu dữ liệu trong SQL

SQL có 20 kiểu dữ liệu tất cả.
1. Binary
2. Bit
3. Char
4. Datetime
5. Decimal
6. Float
7. Image
8. Int
9. Money
10. Nchar
11. Ntext
12. Nvarchar
13. Real
14. Smalldatetime
15. Smallint
16. Smallmoney
17. Text
18. Tinyint
19. Varbinary
20. Varchar

Khi hiểu được ý nghĩa của các kiểu dữ liệu này, mình sẽ xây dựng được cơ sở dữ liệu một cách tối ưu nhất.
Lập trình chuyên nghiệp - Nhất định sẽ thế

// Chôm được cái này trên 1 site, copy về đây dịch dần :D

Data Types Description
bigint: Dữ liệu kiểu số Nguyên (-2^63 đến 2^63-1)
int: Dữ liệu kiểu số Nguyên (-2^31 đến 2^31-1)
smallint: Dữ liệu kiểu số Nguyên (-2^15 đến 2^15-1)
tinyint: Dữ liệu kiểu số Nguyên (0 đến 255)
bit: Dữ liệu kiểu số Nguyên với 2 giá trị 0 & 1
decimal Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1
numeric Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1
money: Dữ liệu kiểu tiền tệ (-2^63 đến 2^63-1)
smallmoney: Monetary data values from -214,748.3648 through +214,748.3647
float Floating precision number data from -1.79E + 308 through 1.79E + 308
real Floating precision number data from -3.40E + 38 through 3.40E + 38
datetime Date and time data from January 1, 1753, through December 31, 9999,
with an accuracy of 3.33 milliseconds
smalldatetime Date and time data from January 1, 1900, through June 6, 2079,
with an accuracy of one minute
char Fixed-length character data with a maximum length of 8,000 characters
varchar Variable-length data with a maximum of 8,000 characters
text Variable-length data with a maximum length of 2^31 - 1 characters
nchar Fixed-length Unicode data with a maximum length of 4,000 characters
nvarchar Variable-length Unicode data with a maximum length of 4,000 characters
ntext Variable-length Unicode data with a maximum length of 2^30 - 1 characters
binary Fixed-length binary data with a maximum length of 8,000 bytes
varbinary Variable-length binary data with a maximum length of 8,000 bytes
image Variable-length binary data with a maximum length of 2^31 - 1 bytes
cursor A reference to a cursor
sql_variant A data type that stores values of various data types,
except text, ntext, timestamp, and sql_variant
table A special data type used to store a result set for later processing
timestamp A database-wide unique number that gets updated every time
a row gets updated
uniqueidentifier A globally unique identifier

Thứ Ba, 6 tháng 5, 2008

Các hàm Ranking mới trong SQL Server 2005


Cùng với SQL Server 2005, Microsoft đã giới thiệu một số tính năng mới và những tính năng này sẽ giúp cho chuyên viên về DBA hay SQL Server dễ dàng hơn trong việc viết mã và duy trì cơ sở dữ liệu SQL Server. Bài này sẽ thảo luận về các hàm ranking mới được cung cấp trong SQL Server 2005. Các tính năng mới đó sẽ giúp bạn dễ dàng viết mã T-SQL để kết hợp xếp loại được tập hợp kết quả của bạn. Bài sẽ hướng dẫn từng phần trong các hàm ranking mới và cung cấp một số ví dụ nhằm minh họa hoạt động của hàm.


Các hàm Ranking là gì?

Các hàm Ranking cho phép bạn có thể đánh số liên tục (xếp loại) cho các tập hợp kết quả. Các hàm này có thể được sử dụng để cung cấp số thứ tự trong hệ thống đánh số tuần tự khác nhau. Có thể hiểu đơn giản như sau: bạn có từng con số nằm trên từng dòng liên tục, tại dòng thứ nhất xếp loại số 1, dòng thứ 2 xếp loại số là 2… Bạn có thể sử dụng hàm ranking theo các nhóm số tuần tự, mỗi một nhóm sẽ được đánh số theo lược đồ 1,2,3 và nhóm tiếp theo lại bắt đầu bằng 1,2,3…

Dữ liệu chạy thử cho các ví dụ

Để có một vài ví dụ cho từng hàm ranking, tôi cần thiết lập một số dữ liệu chạy thử. Trong dữ liệu chạy thử, tôi sử dụng một bảng “Person” khá đơn giản. Bảng sẽ bao gồm 3 cột “FirstName”, “Age” và “Gender”. Đoạn mã dưới nhằm tạo ra và ghi lại dữ liệu chạy thử vào file.

SET NOCOUNT ON
CREATE TABLE Person(
FirstName VARCHAR(10),
Age INT,
Gender CHAR(1))
INSERT INTO Person VALUES ('Ted',23,'M')
INSERT INTO Person VALUES ('John',40,'M')
INSERT INTO Person VALUES ('George',6,'M')
INSERT INTO Person VALUES ('Mary',11,'F')
INSERT INTO Person VALUES ('Sam',17,'M')
INSERT INTO Person VALUES ('Doris',6,'F')
INSERT INTO Person VALUES ('Frank',38,'M')
INSERT INTO Person VALUES ('Larry',5,'M')
INSERT INTO Person VALUES ('Sue',29,'F')
INSERT INTO Person VALUES ('Sherry',11,'F')
INSERT INTO Person VALUES ('Marty',23,'F')

Hàm ROW_NUMBER

Hàm đầu tiên tôi muốn nói tới là ROW_NUMBER. Hàm này trả lại một dãy số tuần tự bắt đầu từ 1 cho mỗi dòng hay nhóm trong tập hợp kết quả. Hàm ROW_NUMBER sẽ có cú pháp sau:

ROW_NUMBER ( ) OVER ( [ ] )

Trong đó:

là cột hay tập hợp các cột được sử dụng để quyết định việc gộp nhóm cho hàm ROW_NUMBER áp dụng cho việc đánh số tuần tự.

là một cột hay tập hợp các cột được sử dụng để sắp xếp tập hợp kết quả trong nhóm (partition)

Để hiểu thêm về cách sử dụng hàm ROW_NUMBER, ví dụ dưới sẽ đánh số liên tục cho tất cả các dòng trong bảng Person và sắp xếp chúng theo trường Age

SELECT ROW_NUMBER() OVER (ORDER BY Age) AS [Row Number by Age],
FirstName,
Age
FROM Person


Và đây là tập hợp kết quả mã T-SQL trên:

Row Number by Age FirstName Age
-------------------- ---------- ------
1 Larry 5
2 Doris 6
3 George 6
4 Mary 11
5 Sherry 11
6 Sam 17
7 Ted 23
8 Marty 23
9 Sue 29
10 Frank 38
11 John 40

Bạn có thể thấy tôi đã đánh số liên tục cho toàn bộ các dòng trong bảng Person bắt đầu từ số 1, và tập hợp kết quả được sắp xếp theo cột Age. Sự sắp xếp này được hoàn thiện là do tiêu chuẩn “ORDER BY Age” trong mệnh đề ORDER BY của hàm ROW_NUMBER.

Giả sử bạn không muốn tập hợp kết quả của bạn được sắp xếp mà muốn đưa bảng trở lại sắp xếp theo số bản ghi của từng dòng. Hàm ROW_NUMBER lại luôn yêu cầu phải có mệnh đề ORDER BY, vậy bạn cần phải đưa một giá trị nào đó vào trong mệnh đề này. Trong hàm truy vấn bên dưới tôi đã chỉ định “SELECT 1” vào trong mệnh đề ORDER BY, điều này sẽ chỉ trả lại kết quả là bảng như đã lưu trữ ban đầu và tất nhiên cách đánh số tuần tự vẫn bắt đầu từ 1:

SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [Row Number by Record Set],
FirstName,
Age
FROM Person


Đây là tập hợp kết quả khi chạy hàm truy vấn trên:

Row Number by Record FirstName Age
-------------------- ---------- ------
1 Ted 23
2 John 40
3 George 6
4 Mary 11
5 Sam 17
6 Doris 6
7 Frank 38
8 Larry 5
9 Sue 29
10 Sherry 11
11 Marty 23

Hàm ROW_NUMBER không chỉ cho phép bạn sắp xếp toàn bộ tập hợp dòng mà còn có thể sử dụng mệnh đề PARTITION để lọc ra nhóm dòng cần đánh số. Các dòng sẽ được đánh số tuần tự trong từng giá trị PARTITION độc nhất. Các dãy số được đánh sẽ luôn bắt đầu từ 1 cho từng giá trị PARTITION mới trong tập hợp bản ghi của bạn. Hãy xem hàm truy vấn dưới đây

SELECT ROW_NUMBER() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person


Khi chạy truy vấn trên, tập hợp kết quả sẽ ra như sau:

Partition by Gender FirstName Age Gender
-------------------- ---------- ----------- ------
1 Doris 6 F
2 Mary 11 F
3 Sherry 11 F
4 Sue 29 F
1 Larry 5 M
2 George 6 M
3 Sam 17 M
4 Ted 23 M
5 Marty 23 M
6 Frank 38 M
7 John 40 M

Trong ví dụ này tôi đã phân vùng bởi Gender và sắp xếp theo Age. Thực hành theo ví dụ này sẽ cho phép tôi đánh số tuần tự các bản ghi là Female trong bảng Person theo độ tuổi, và sau đó việc đánh số sẽ bắt đầu lại với nhóm là Male.

Hàm RANK

Đôi khi bạn muốn một dòng có cùng sắp xếp giá trị cột như các dòng khác có cùng một xếp loại. Nếu thế thì hàm RANK () có thể giúp bạn. Hàm RANK có cú pháp như sau:

RANK ( ) OVER ( [] )

Trong đó:

là một cột hay tập hợp các cột được sử dụng để quyết đinh việc đánh số liên tục trong hàm RANK

là một cột hay tập hợp các cột được sử dụng để sắp xếp tập hợp kết quả trong nhóm (partition)

Hàm RANK sẽ đánh số liên tục một tập hợp bản ghi nhưng khi có 2 dòng có cùng giá trị sắp xếp thì hàm sẽ đánh giá là cùng bậc giá trị. Giá trị xếp loại vẫn sẽ tăng kể cả khi có 2 dòng cùng giá trị, vì vậy khi đánh giá một giá trị sắp xếp tiếp theo thì số thứ tự vẫn tiếp tục được đánh nhưng sẽ tăng thêm 1 giá trị vào các dòng tiếp theo trong tập hợp.

Đây là ví dụ của hàm rank trong tập hợp bản ghi sắp xếp theo Age:

SELECT RANK() OVER (ORDER BY Age) AS [Rank by Age],
FirstName,
Age
FROM Person

Và kết quả trả về:

Rank by Age FirstName Age
-------------------- ---------- ------
1 Larry 5
2 Doris 6
2 George 6
4 Mary 11
4 Sherry 11
6 Sam 17
7 Ted 23
7 Marty 23
9 Sue 29
10 Frank 38
11 John 40

Như bạn thấy, với các dòng trùng giá trị Age thì ở phần Rank by Age cũng có cùng giá trị. Bạn có thể thấy Doris và George, Mary và Sherry, cũng tương tự là Ted và Marty, từng cặp một đều có cùng giá trị Rank by Age. Lưu ý rằng Doris và George cùng có xếp loại là 2 nhưng xếp loại của Mary (có giá trị Age tiếp theo) lại không phải 3 mà là 4. Nguyên nhân ở đây là Mary được trả về bản ghi thứ 4 trong tập hợp bản ghi, và hàm RANK() đã lấy số liệu đó khi thiết lập giá trị xếp loại tiếp theo trong Rank by Age

Nếu bạn muốn có một nhiều xếp loại trong tập hợp bản ghi của mình thì với từng xếp loại bạn cần đặt một nhóm cụ thể bằng cách sử dụng mệnh đề PARTITION BY trong hàm RANK. Ví dụ dưới sẽ cho thấy tác dụng khi tôi nhóm xếp loại theo Gender và sắp xếp theo Age

SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person

Đây là kết quả khi chạy các hàm truy vấn trên:

Partition by Gender FirstName Age Gender
-------------------- ---------- ----------- ------
1 Doris 6 F
2 Mary 11 F
2 Sherry 11 F
4 Sue 29 F
1 Larry 5 M
2 George 6 M
3 Sam 17 M
4 Ted 23 M
4 Marty 23 M
6 Frank 38 M
7 John 40 M

Bạn có thể thấy là Gioitinh là “F” được bắt đầu xếp loại từ 1 cho đến 4, sau đó bắt đầu đánh số lại từ 1 cho Gioitinh là “M”

Hàm DENSE_RANK

Hàm DENSE_RANK cũng giống như hàm RANK, tuy vậy, hàm này không cung cấp khoảng cách giữa các số xếp loại. Thay vào đó, hàm này sẽ xếp loại liên tục cho từng giá trị ORDER BY cụ thể. Với hàm DENSE_RANK, kể cả khi có hai dòng có cùng giá trị xếp loại thì dòng tiếp theo vẫn chỉ tăng thêm một giá trị so với dòng trên. Hàm DENSE_RANK có cú pháp như hàm RANK.

Đây là hàm DENSE_RANK được tôi sử dụng để xếp loại cho toàn bộ các bản ghi trong bảng Person theo trường Age

SELECT DENSE_RANK() OVER (ORDER BY Age) AS [Dense Rank by Age],
FirstName,
Age
FROM Person


Đoạn mã trên sẽ xuất ra như sau:

Dense Rank by Age FirstName Age
-------------------- ---------- -----------
1 Larry 5
2 Doris 6
2 George 6
3 Mary 11
3 Sherry 11
4 Sam 17
5 Ted 23
5 Marty 23
6 Sue 29
7 Frank 38
8 John 40





Như bạn thấy các số trong cột “Dense Rank By Age” vẫn đảm bảo tính liên tục, không hề bị ngắt quãng kể cả khi có hai dòng cùng giá trị ORDER BY và giá trị xếp loại như Ted và Marty.

Hàm NTILE

Hàm cuối cùng là hàm NTILE. Đây là hàm được sử dụng để phá vỡ tập hợp bản ghi trong một số cụ thể của các nhóm. Hàm NTILE cũng sử dụng cú pháp như các hàm ranking khác.

Trong ví dụ đầu của hàm này, tôi sẽ nhóm các bản ghi trong bảng Person thành 3 nhóm khác nhau. Tôi muốn các nhóm này dựa trên cột Age. Để làm được điều này, tôi sẽ chạy T-SQL sau:

SELECT FirstName,
Age,
NTILE(3) OVER (ORDER BY Age) AS [Age Groups]
FROM Person


Đây là tập hợp kết quả của tôi từ câu lệnh T-SQL trên:

FirstName Age Age Groups
---------- ----------- --------------------
Larry 5 1
Doris 6 1
George 6 1
Mary 11 1
Sherry 11 2
Sam 17 2
Ted 23 2
Marty 23 2
Sue 29 3
Frank 38 3
John 40 3





Trong tập hợp kết quả đã có ở trên với 3 nhóm Age khác nhau. Nhóm đầu tiên bắt đầu từ 5 đến 11 tuổi, nhóm thứ 2 bắt đầu từ 11 đến 23 và nhóm cuối cùng là từ 29 đến 40. Hàm NTILE chỉ có tác dụng chia đều số lượng các bản ghi và đưa vào từng nhóm số. Sử dụng hàm NTILE cho từng bản ghi trong một nhóm sẽ đưa gia các xếp loại giống nhau.

Hàm NTILE là một hàm rất có ích nếu bạn chỉ muốn trả lại một nhóm cụ thể trong các bản ghi. Dưới đây là một ví dụ khi tôi muốn trả lại chỉ nhóm người có độ tuổi chung bình (Nhóm Age 2) từ ví dụ trên.

SELECT FirstName,
Age,
Age AS [Age Group]
FROM ( SELECT FirstName,
Age,
NTILE(3) OVER (ORDER BY Age) AS AgeGroup
FROM Person) A
WHERE AgeGroup = 2


Kết quả của câu lệnh trên:

FirstName Age Age Group
---------- ----------- -----------
Sherry 11 11
Sam 17 17
Ted 23 23
Marty 23 23





Kết luận

Mã hóa một quy trình sắp xếp các số tuần tự trong tập hợp bản ghi được sử dụng để lấy một số trong các dòng của mã. SQL Server 2005 đã đưa ra một vài hàm ranking mới. Hy vong trong thời gian tới bạn sẽ cần xếp loại cho các tập hợp bản ghi của mình và một trong các hàm đã được giới thiệu trong bài sẽ giúp bạn hoàn thành công việc đó, nó là một việc hoàn toàn đơn giản.

Nguồn Quantrimang.com

(Sưu tầm)

Những tính năng mới trong SQL Server 2005.

Khi SQL Server 2005 ra đời, thì những kiến thức về SQl 2000 thực sự không đủ để bạn làm chủ được SQL 2005. Khả năng và độ linh họat của SQl Serve 2005 được phản ánh rất rõ trong công cụ Management Studio mới và BIDS.

1. Nâng cao bảo mật:

Bảo mật là trong tâm chính cho những tính năng mới trong SQL Server 2005. Điều này phản ánh sự phản ứng lại của Microsoft với sâu máy tính Slammer đã tấn công SQL Server 2000. Nó cũng cho thấy một thế giới ngày càng có nhiều dữ liệu kinh doanh có nguy cơ bị lộ ra ngoài Internet.

a, Bảo mật nhóm thư mục hệ thống:

- Nhóm mục hệ thống bao gồm các View bên dưới cấu trúc dữ liệu hệ thống. Người sử dụng không thấy được bất cứ bảng bên dưới nào, vì thế những người dùng không có kỹ năng hoặc có ý phá hoại không thể thay đổi hoặc làm hư hỏng các bảng này được. Điều này ngăn bạn hoặc bất kỳ ai khác làm hỏng cấu trúc chính mà SQL Server phụ thuộc vào.

b, Bắt buộc chính sách mật khẩu:

- Khi bạn cài Window Server 2003, bạn có thể áp dụng chính sách mật khẩu của Window (bạn đang áp dụng) cho SQL Server 2005. Bạn có thể thi hành chính sách về mức độ và ngày hết hạn của mật khẩu trên SQL Server 2005 giống hệt như cho tài khoản đăng nhập vào Windows mà trong 2000 không hỗ trợ tính năng này. Bạn có thể tắt hoặc mở việc bắt buộc chính sách mật khẩu cho từng đăng nhập riêng.

Zensoft Website - Tính năng bảo mật trong SQL Server 2005.

c, Tách biệt giản đồ và người dùng:

- SQL Server 2000 không có khái niệm giản đồ (Schema): Người dùng sở hữu các đối tượng CSDL. Nếu một người dùng User1 tạo một đối tượng là myTable thì tên của đối tượng sẽ là User1.myTable. Nếu User1 bị xóa khi một nhân viên rời khỏi công ty chẳng hạn, bạn cần thay đổi tên của đối tượng. Việc này gây ra vấn đề với những ứng dụng phụ thuộc vào tên của đối tượng để truy xuất dữ liệu.

- Trong SQL Server 2005, người dùng có thể tạo giản đồ có tên khác với người dùng để chứa các đối tượng CSDL. Ví dụ User1 có thể tạo giản đồ có tên là HR và tạo một đối tượng Employee. Bạn tham chiếu đến đối tượng đó như là HR.Employee. Vì thế nếu User1 rời khỏi công ty, bạn không cần thay đổi tên giản đồ, nghĩa là mã ứng dụng vẫn được giữ nguyên bởi vì đối tượng vẫn được gọi là HR.Employee.

d, Tự động tạo chứng nhận cho SSL:

- Trong SQL Server 2000, khi bạn dùng Secure Sockets Layer (SSL) để đăng nhập vào thể hiện SQL Server, bạn phải tạo chứng nhận để làm cơ sở sử dụng SSL. SQL Server 2005 tự tạo chứng nhận cho bạn, điều đó cho phép bạn sử dụng SSL, mà không cần phải quan tâm việc tạo chứng nhận.

2. Mở rộng T-SQL:

- Transact - SQL là một phiên bản của Structured Query Language (SQl), được dùng bởi SQL Server 2005. Transact-SQL thường được gọi là T-SQL. T-SQL có nhiều tính năng do Microsoft phát triển không có trong ANSI SQL (SQL chuẩn).

- Cải tiến khả năng hỗ trợ XML: SQL Server 2000 cho phép bạn nhận dữ liệu quan hệ ở dạng XML với mệnh đề FOR XML, hoặc lưu trữ XML như dữ liệu quan hệ trong SQL Server sử dụng mệnh đề OPEN XML. SQL Server 2005 có thêm một kiểu dữ liệu mới là XML cho phép bạn viết mã nhận dữ liệu XML như là XML, tránh việc biến đổi từ XML thành dữ liệu quan hệ khi dùng OPEN XML. Bạn cũng có thể dùng tài liệu giản đồ biểu diễn trong ngôn ngữ W3C XML Schema Definition (đôi khi gọi là giản đồ XSD) để chỉ ra cấu trúc hợp lệ trong XML.

- Việc sử dụng khối Try... Catch trong mã T-SQL cho phép bạn chỉ ra điều gì phải làm khi lỗi xảy ra.

- Trong SQL Server management Studio, bạn có thể tìm thấy nhiều đoạn mã mẫu giúp bạn thực hiện những tác vụ thường gặp với T-SQL. Để xem các mẫu này, bạn chọn trình đơn View > Template Explorer.

3. Tăng cường hỗ trợ người phát triển:

a, Hỗ trợ cho Common Language Runtime (CLR):

- CLR Được dùng bơi mã .NET, được nhúng vào trong cỗ máy CSDL SQL Server 2005. bạn có thể viết các thủ tục lưu sẵn, trigger, hàm, tính toán tập hợp và các kiểu dữ liệu do người dùng định nghĩa bằng cách sử dụng các ngôn ngữ như VB.NET hoặc C#.

- Thử tục lưu sẵn được viết bằng ngôn ngữ .NET là một thay thế tốt cho thủ tục lưu sẵn mở rộng trong SQL Server 2000 bởi vì bạn có thể chỉ ra mức độ bảo mật cho mã .NET. Có 3 mức độ bảo mật cho mã .NET:

+ An Toàn: Mức độ này không cho phép truy cập ngoài phạm vi SQL Server. Mã của bạn không được phép truy cập hệ thống tập tin, registry, các biến môi trường hoặc mạng. Đây là mức bảo mật cao nhất.

+ Truy xuất mở rộng: Mức độ này cho phép mã của bạn truy xuất có giới hạn ra ngoài phạm vi SQL Server. Cụ thể là bạn có thể truy xuất registry, hệ thống tập tin, các biến môi trường hoặc mạng.

+ Không an toàn: Ở mức độ này bạn có thể truy xuất bất kỳ chức năng mong muốn nào ngoài phạm vi SQL Server 2005. Bạn chỉ nên dùng mức độ bảo mật này nếu chắc chắn mã được viết tốt, và bạn tin cậy người viết mã đó.

b, Các kiểu dữ liệu mới:

- Varchar(max): Kiểu này cho phép bạn dùng chuỗi kí tự lớn hơn 8000 byte (8000 kí tự). Tối đa là 2 GB.

- Nvarchar(max): Kiểu này cho phép bạn dùng chuỗi kí tự Unicode lớn hơn 8000 byte (4000 kí tự). Tối đa là 2 GB.

- Varbinary(max): kiểu này cho phép bạn dùng dữ liệu nhị phân lớn hơn 8000 byte.

c, SQL Management Object (SMO):

- SMO thay thế cho Distributed Management Objects (DMO) được dùng trong SQL Server 2000. SMO nhanh hơn DMO ở nhiều thiết lập bởi vì mỗi đối tượng chỉ được thực hiện từng phần. Ví dụ, bạn muốn liệt kê một danh sách hàng ngàn đối tượng lên tree view (Cấu trúc hình cây), bạn không cần nạp đầy đủ thông tin của đối tượng ngay một lần. Ban đầu bạn chỉ cần hiển thị tên của đối tượng, khi nào cần thì mới nạp đầy đủ thông tin của đối tượng đó. Điều này giúp các bạn tiết kiệm được nhiều thời gian cho các tác vụ đơn giản.

d, Tự động thực thi mã kịch bản:

- Nếu bạn đã dùng các chương trình của Microsoft như Microsoft Access, Excel, bạn biết rằng có thể tạo các macro (mã thực thi) cho phép bạn thực hiện tự động một số tác vụ nào đó. SQL Server 2005 bây giờ có tính năng tự động tạo mã kịch bản T-SQL từ những hành động mà bạn dùng gian diện hình ảnh trong SQL Server Management Studio.

e, Truy cập Http:

- Dùng giao thức HTTP để truy cập vào SQL Server 2005 là tính năng mới cho phép người lập trình truy cập vào SQL Server mà không phụ thuộc vào việc IIS có đang chạy trên cùng máy hay không. SQL Server có thể cùng tồn tại với IIS nhưng không giống với SQL Server 2000, IIS không còn là yêu cầu bắt buộc với SQL Server 2005. Truy cập HTTP cho phép phát triển dung XML Web Service với SQL Server 2005. Truy cập HTTP có thể thực thi nhóm lệnh T-SQL hoặc thủ tục lưu sẵn. Tuy nhiên, vì lí do bảo maajtm truy cập HTTP mặc định sẽ bị vô hiệu hóa. Để sử dụng truy cập HTTP bạn phải chỉ rõ người dùng, thủ tục lưu sẵn và CSDL được phép hỗ trợ nó.

4. Tăng cường khả năng quản lý:

Các công cụ quản lý trong SQL Server 2005 có sự thay đổi rất lớn với SQL Server 2000. Thay đổi chính đến từ SQL Server management Studio.

a, Những công cụ quản lý mới:

- Trong SQL Server 2000, công cụ quản lý chủ yếu là Enterprise Manager và Query Analyzer. SQL Server 2005, Với công cụ quản lý mới là SQL Server Management Studio đã thay thế hoàn toàn 2 công cụ trên của SQL 2000. Công cụ này cho phép bạn quản lý nhiều thể hiện SQL Server dễ dàng hơn. Từ một giao diện, bạn có thể quản lý nhiều thể hiện của cỗ mãy CSDL SQL Server, Analysis Services, Intergration Services và Reporting Services.

- Công cụ mới SQL Server Configuration Manager cho phép bạn kiểm soát các dịch vụ kết hợp với SQL Server 2005. Nó có thể thay thế cho Services Manager và công cụ cấu hình mạng cho Server và Client. Bạn cũng có thể kiểm soát một số dịch vụ khác như: SQL Server, SQL Agent, SQL Server Analysis Services, DTS Server (Cho SQL Server Integration Services), Full - Text Search, SQL Browser.

b, Profiler:

- Cho phép bạn phân tích những vấn đề về hiệu suất thực thi trong SQL Server 2005. Ví dụ, Profiler mở các tập tin truy vết mà bạn đã lưu trong hệ thống tập tin để bạn xem lại và phân tích các quá trình SQL Server mà bạn quan tâm. Profiler có thể biểu diễn thông tin truy vết ở dạng đồ thị để bạn có thể dễ dàng xem điều gì đã xảy ra. Nó có thể nhận dữ liệu được ghi lại bởi Windows Performance Monitor. Bạn có thể hiển thị dữ liệu dạng đồ thị, , xem hiệu suất thực thi trên khoảng thời gian đã chọn. Từ đồ thị, bạn có thể truy cập đến điểm có vấn đề.

c, SQL Server Agent:

- Những khả năng của SQL Server Agent, thành phần hỗ trợ cho các tác vụ đã được lập thời gian biểu, được nâng cao. ví dụ, số tác vụ đồng thời mà SQL Server Agent có thể chạy được tăng lên. SQL 2000 chỉ dùng SQL Agent trong những tác vụ liên quan đến cỗ máy CSDL. còn trong 2005, SQL Server Agent thực thi các tác vụ cho Analysis Services và Integration Services. SQL Server Agent dùng Windows Management Instrumentation (WMI), cho phép ạn viết mã tránh thực thi tác vụ, như khi đĩa cứng đầy thì các tác vụ vẫn được thực thi thành công.

d, Cấu hình động:

- Trong SQL Server 2005, bạn có thể thực hiện bất kì Thay đổi cấu hình nào mà không cần khởi động lại SQL Server, kể cả khi bạn đang chạy trên Windows Server 2003. Bên cạnh đó, bạn cũng có thể thay đổi áp lực CPU và I/O nếu bạn cần, có thể thêm nóng bộ nhớ cho Server nếu bạn có phần cứng thích hợp.

e, Gửi mail từ CSDL:

- Đây là tính năng khá mới mẻ trong SQL Server 2005. Nó thay thế SQL Mail trong SQL Server 2000. Database Mail sử dụng giao thức Simple Mail Transfer Protocol (SMTP). Không còn bất kỳ phụ thuộc nào với Messaging Application Programming Interface(MAPI) và cũng không còn đòi hỏi phải có Outlook. Việc loại bỏ những phụ thuộc này tránh được hiều vấn đề mà người dùng SQL Server 2000 gặp phải với SQL Mail. Ngoài ra, Database Mail cũng hỗ trợ hoạt động liên tiếp, ghi tập tin Log và kiểm tra hoạt động.