Cs-ôn nào

I. CÁC BẢNG DỮ LIỆU TRONG CSDL VENDOR AND PURCHASING

Schema.Table Chứa các loại thông tin Chú thích
Person.Address Thông tin địa chỉ của các khách hàng.

Mỗi khách hàng có thể có nhiều địa chỉ. Ví dụ một khách hàng có thể có địa chỉ thanh toán và địa chỉ khác để vận chuyển.

Liên kết với bảng VendorAddress ánh xạ vendors đến địa chỉ của họ.

The Address table also contains address information for Adventure Works Cycles employees and customers.

Person.Contact Names of vendor employees with whom Adventure Works Cycles purchasing agents order products.

A vendor may have more than one contact. For example, a sales agent and a sales manager. The Adventure Works Cycles purchasing agent may have the sales agent as a primary customer contact and the sales manager as a secondary contact.

Bảng này chứa danh sách các nhân viên của nhà cung cấp. Họ làm quản lý việc mua sản phẩm của các đại lý phân phối.

Một nhà cung cấp có nhiều hơn một thong tin lien lạc. Ví dụ có địa chỉ của đại lý bán hàng và của quản lý bán hàng. Quá trình mua bán của đại lý bán hàng thì Đại lý bán hàng là khóa chính còn quản lý bán hàng là khóa phụ.

 

The associative table VendorContact maps contacts to vendors.

The column AdditionalContactInfo contains data such as additional telephone numbers (cell telephone, fax, and so on) specific to the contact. The column is an xml data type. For more information, see About the Contact.AdditionalContactInfo xml Column.

Sự lien kết bảng VendorContact với bảng contacts và vendors.

Cột AdditionalContactInfo chứa dữ liệu như số điện thoại(Số máy bàn, fax, và một số thong tin khác) cụ thể đối với lien lạc. đó là cột có kiểu dữ liệu xml[Xem them : Contact.AdditionalContactInfo xml Column]

 

HumanResources. Employee Contains employee information such as their national identification number, work title, and vacation and sick leave hours. Employee names are stored in the Contact table.

 

Bảng chứa thong tin nhân viên như Số chứng minh thư nhân dân, công việc chính, số nghỉ phép, nghỉ ốm. tên của nhân viên được lưu trong bảng Conntact

 
Production.Product Contains the products sold or used in the manufacturing of sold products

Bảng chứa thong tin sản phẩm bán, sản xuất.

 

 
Production.ProductVendor Maps vendors to the products they supply.

A product may be supplied by more than one vendor, and a vendor may supply more than one product.

Bảng nhà cung cấp – Sản phẩm.

Liên kết các nhà cung cấp với các sản phẩm mà họ cung cấp.

Một sản phẩm có thế cùng được cung cấp bởi nhiều nhà cung cấp và 1 nhà cung cấp có thể cung cấp nhiều hơn 1 sản phẩn.

 

 
Purchasing.PurchaseOrderDetail Details of the purchase order, such as products ordered, quantity, and unit price.

Bảng chi tiết đặt hàng chẳng hạn như[Sản phẩm. số lượng, đơn giá]

 
Purchasing.PurchaseOrderHeader Purchase order summary information, such as total due, order date, and order status.

Thông tin tóm tắt yêu cầu mua hàng như Số lượng, ngày đặt hàng, tình trạng đặt hàng[có thể hiểu như : Chưa chuyển hàng, đã chuyển hàng …]

The PurchaseOrderHeader and PurchaseOrderDetail tables together create a master-detail relationship.

Hai bảng PurchaseOrderHeader, PurchaseOrderDetail có quan hệ master -detail

Purchasing.ShipMethod A lookup table that is used to maintain standard ways of shipping products.

Bảng chứa các thong tin về các kiểu chuyển hàng mà công ty có

The ShipMethodID column is included in the PurchaseOrderHeader table.

Cột ShipMethodID có chứa trong bảng PurchaseOrderHeader

Purchasing.Vendor Details about vendors, such as the vendor name and account number.

Bảng này chứa các thong tin chi tiết về các nhà cung cấp như Tên, số tài khoản nhà cung cấp.

 

 
Purchasing.VendorAddress Links customers to address information in the Address table.

Bảng này chứa các thong tin kết nối các khách hàng với thong tin địa chỉ trong bảng địa chỉ.

 

Addresses are categorized by type, such as billing, home, shipping, and so on). The AddressTypeID column maps to the AddressType table.

Các địa chỉ được phân theo từng kiểu như theo hóa đơn, vị trí nhà, kiểu giao hàng và những thứ khác.

Purchasing.VendorContact Street address information for all customers.

Customers may have more  than one address. For example, a customer may have a billing address and a different address for shipping.

Bảng này chứa địa chỉ của tất cả các khách hàng.

Mỗi khách hàng có thể có nhiều hơn một địa chỉ ví dụ như địa chỉ thanh tóan, địa chỉ giao hàng

This is an associative table. See the Contact

 

Đây là một bảng kết hợp. xem bảng Contact.

 

1. Bảng Address

Tên trường Kiểu DL Nullability Mô tả
AddressID int Not null Primary key.
AddressLine1 nvarchar(60) Not null Địa chỉ 1.
AddressLine2 nvarchar(60) Null Địa chỉ 2
City nvarchar(30) Not null Tên thành phố.
StateProvinceID int Not null Mã số định danh duy nhất cho các bang hoặc tỉnh. Là khóa ngoại của  StateProvince.StateProvinceID.
PostalCode nvarchar(15) Not null Mã bưu điện cho các địa chỉ đường phố.
rowguid uniqueidentifier ROWGUIDCOL Not null ROWGUIDCOL number uniquely identifying the row. Used to support a merge replication sample.
ModifiedDate datetime Not null Thời gian cập nhật bản ghi lần cuối cùng.

2. Bảng Contact

Tên trường Kiểu DL Nullability Mô tả
ContactID int Not null Primary key for Contact rows.
NameStyle NameStyle (user-defined type)

bit

Not null Thứ tự dữ liệu FirstName và LastName được lưu.

0 = Theo thứ tự First-name, last-name.

1 = Theo thứ tự Last-name, first-name.

Title nvarchar(8) Null Tiêu đề lịch sự cho một người. Ví dụ, Mr. or Ms.
FirstName Name (user-defined type)

nvarchar(50)

Not null Tên của một người.
MiddleName Name (user-defined type)

nvarchar(50)

Null Tên đệm của một người
LastName Name (user-defined type)

nvarchar(50)

Not null Họ của một người.
Suffix nvarchar(10) Null Surname suffix. Ví dụ, Sr. or Jr.
EmailAddress nvarchar(50) Null Địa chỉ email của một người.
EmailPromotion int Null 0 = Không muốn nhận email từ chương trình khuyến mại, quảng cáo.

1 = Muốn nhận email từ chương trình khuyến mại, quảng cáo.

Phone Phone (user-defined type)

nvarchar(25)

Null Địa chỉ phone liên hệ với người đó.
PasswordHash varchar(40) Not null Mật khẩu của tài khoản email.
PasswordSalt varchar(10) Not null Giá trị ngẫu nhiên nối với mật khẩu trước khi được băm.
AdditionalContactInfo xml Null Thêm thong tin địa chỉ liên hệ cho một người, như thêm số phone, địa chỉ, hoặc chỉ dẫn đặc biệt, ghi chú.

Dữ liệu được lưu theo định dạng XML.

rowguid uniqueidentifier ROWGUIDCOL Not null ROWGUIDCOL number uniquely identifying the row. Used to support a merge replication sample.

Trường này chứa thong tin xác định duy nhất hàng[Khóa]. Được sử dụng để một kết hợp mẫu nhân rộng

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

3. Bảng Employee

Tên trường Kiểu DL Nullability Mô tả
EmployeeID int Not null Primary key
NationalIDNumber nvarchar(15) Not null Mã số quốc gia duy nhất, ví dụ như: chứng minh thư, mã số thuế, ….
ContactID int Not null Xác định nhân viên trong bảng Contact. Khóa ngoại của Contact.ContactID.
LoginID nvarchar(256) Not null Đăng nhập mạng.
ManagerID int Null Mã người quản lý của nhân viên. Khóa ngoại của Employee.EmployeeID.
Title nvarchar(50) Not null Tiêu để của công việc như người mua hoặc đại diện bán hang.
BirthDate datetime Not null Ngày sinh.
MaritalStatus nchar(1) Not null Tình trạng hôn nhân

M = Đã có gia đình

S = Độc thân

Gender nchar(1) Not null Giới tính: M = Nam, F = Nữ
HireDate datetime Not Null Ngày nhân viên được nhận làm.
SalariedFlag Flag (user-defined type)

bit

Not null Phân loại công việc.

0 = Theo giờ, không được thương lượng (trả theo quy định của công ty).

1 = Trả lương, được thương lượng.

VacationHours smallint Not null Số giờ nghỉ.
SickLeaveHours smallint Not null Số giờ nghỉ ốm.
CurrentFlag Flag (user-defined type)

bit

Not null 0 = Inactive

1 = Active

rowguid uniqueidentifier ROWGUIDCOL Not null ROWGUIDCOL number that uniquely identifies the row. Used to support a merge replication sample. Trường này chứa thong tin xác định duy nhất hàng[Khóa]. Được sử dụng để một kết hợp mẫu nhân rộng
ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

4. Bảng Product

Tên trường Kiểu DL Nullability Mô tả
ProductID int Not null Primary key.
Name Name (user-defined type)

nvarchar(50)

Not null Tên sản phẩm.
ProductNumber nvarchar(25) Not null Mã số duy nhất của sản phẩm.
MakeFlag Flag (user-defined type)

bit

Not null 0 = Sản phẩm được mua.

1 = Sản phẩm được sản xuất trong công ty.

FinishedGoodsFlag Flag (user-defined type)

bit

Not null 0 = Sản phẩm không phải là mặt hàng thương phẩm.

1 = Sản phẩm có thương phẩm.

Color nvarchar(15) null Màu sản phẩm.
SafetyStockLevel smallint Not null Lượng hàng tồn kho tối thiểu.
ReorderPoint smallint Not null Mức tồn kích thích mua hoặc sản xuất.
StandardCost money Not null Giá chuẩn của sản phẩm.
ListPrice money Not null Giá bán của sản phẩm.
Size nvarchar(5) null Kích thước của sản phẩm.
SizeUnitMeasureCode nchar(3) null Đơn vị đo cho cột size Size.
WeightUnitMeasureCode nchar(3) null Đơn vị đo cho cột Weight.
Weight decimal (8,2) null Trọng lượng của sản phẩm.
DaysToManufacture int Not null Số ngày cần để sản xuất sản phẩm.
ProductLine nchar(2) null R = Road

M = Mountain

T = Touring

S = Standard

Class nchar(2) null H = High

M = Medium

L = Low

Style nchar(2) null – Kiểu

W = Dành cho nam

M = Dành cho nữ

U = Tổng hợp

ProductSubcategoryID smallint null Sản phẩm là một thành viên của tiểu thể loại sản phẩm này. Khóa ngoại tham chiếu đến ProductSubCategory.ProductSubCategoryID.
ProductModelID int null  Khóa ngoại tham chiếu đến ProductModel.ProductModelID.
SellStartDate datetime Not null Thời gian bắt đầu sản phẩm được bán.
SellEndDate datetime null Thời gian sản phẩm không còn được bán về sau nữa..
DiscontinuedDate datetime null Ngày sản phẩm hết hạn.
rowguid uniqueidentifier ROWGUIDCOL Not null ROWGUIDCOL number uniquely identifying the row. Used to support a merge replication sample.

Trường này chứa thong tin xác định duy nhất hàng[Khóa]. Được sử dụng để một kết hợp mẫu nhân rộng

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

 

5. Bảng ProductVendor

Tên trường Kiểu DL Nullability Mô tả
ProductID int Not null Primary key. Là khóa ngoại tham chiếu đến Product.ProductID.
VendorID int Not null Primary key. Là khóa ngoại tham chiếu đến Vendor.VendorID.
AverageLeadTime int Not null Trung bình khoảng thời gian trong ngày giữa việc đặt hàng với nhà cung cấp và nhận được sản phẩm đã mua.
StandardPrice money Not null Giá bán thường dùng của đại lý.
LastReceiptCost money Null Giá của lần bán cuối cùng.
LastReceiptDate datetime Null Ngày sản phẩm mới nhận được của đại lý.
MinOrderQty int Not null Số lượng tối thiểu phải đặt hàng.
MaxOrderQty int Not null Số lượng tối đa phải đặt hang.
OnOrderQty int Null Số lượng đặt hàng thực tế.
UnitMeasureCode nchar(3) Not null Đơn vị tính của sản phẩm.
ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

6. Bảng PurchaseOrderDetail

Tên trường Kiểu DL Nullability Mô tả
PurchaseOrderID int Not null Primary key. Khóa ngoại tham chiếu đến PurchaseOrderHeader.PurchaseOrderID.
PurchaseOrderDetailID int Not null Primary key. Số tuần tự để đảm bảo dữ liệu duy nhất.
DueDate datetime Not null Ngày dự kiến sản phẩm sẽ được nhận bởi nhà cung cấp.
OrderQty smallint Not null Số lượng đặt hàng.
ProductID int Not null Mã xác định sản phẩm được đặt hàng. Khóa ngoại tham chiếu đến Product.ProductID.
UnitPrice money Not null Giá của một sản phẩm.
LineTotal Computed as OrderQty * UnitPrice Not null Tổng tiền sản phẩm.
ReceivedQty decimal (8,2) Not null Số lượng thực tế nhận từ nhà cung cấp (vendor).
RejectedQty decimal (8,2) Not null Số lượng từ chối trong khi kiểm duyệt.
StockedQty Computed as ReceiveQty – RejectedQty Not null Số lượng chấp nhận cho vào kho.
ModifiedDate datetime Not null Ngày giờ bản ghi được cập nhật lần cuối.

7. Bảng PurchaseOrderHeader

Tên trường Kiểu DL Nullability Mô tả
PurchaseOrderID int Not null Primary key.
RevisionNumber tinyint Not null Tự động tăng, để theo dõi những thay đổi trong đơn đặt hàng theo thời gian.
Status tinyint Not null Trạng thái đơn hàng. 1 = Đang chờ.

2 = Chấp nhận.

3 = Từ chối.

4 = Hoàn tất.

EmployeeID int Not null Mã nhân viên tạo đơn mua hàng. Khóa ngoại tham chiếu đến  Employee.EmployeeID.
VendorID int Not null Mã đại lý của đơn hàng. Khóa ngoại tham chiếu đến  Vendor.VendorID.
ShipMethodID int Not null Mã phương pháp vận chuyển. Khóa ngoại tham chiếu đến ShipMethod.ShipMethodID.
OrderDate datetime Not null Ngày tạo đơn hang.
ShipDate datetime Not null Thời gian chuyển hàng theo dự kiến của đại lý.
SubTotal money Not null Tổng tiền của hóa đơn.
TaxAmt money Not null Tiền thuế.
Freight money Not null Giá vận chuyển.
TotalDue SubTotal + TaxAmt + Freight Not null Tổng tiền cho nhà cung cấp.
ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

 

8. Bảng ShipMethod

Tên trường Kiểu DL Nullability Mô tả
ShipMethodID int Not null Primary key.
Name Name (user-defined type)

nvarchar(50)

Not null Tên công ty vận chuyển.
ShipBase money Not null Phí vận chuyển tối thiểu.
ShipRate money Not null Phí vận chuyển cho mỗi pound.
rowguid uniqueidentifier Not null ROWGUIDCOL number uniquely identifying the record. Used to support a merge replication sample.

 

Trường này chứa thong tin xác định duy nhất hàng[Khóa]. Được sử dụng để một kết hợp mẫu nhân rộng

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

 

9. Bảng Vendor

Tên trường Kiểu DL Nullability Mô tả
VendorID int Not null Primary key.
AccountNumber AccountNumber (user-defined type)

nvarchar(15)

Not null Số tài khoản của đại lý (identification).
Name Name (user-defined type)

nvarchar(50)

Not null Tên công ty.
CreditRating tinyint Not null 1 = Superior

2 = Excellent

3 = Above average

4 = Average

5 = Below average

PreferredVendorStatus Flag (user-defined type)

bit

Not null 0 = Do not use if another vendor is available.

1 = Preferred over other vendors supplying the same product.

ActiveFlag Flag (user-defined type)

bit

Not null 0 = Đại lý đã dừng hoạt động.

1 = Đại lý đang hoạt động.

PurchasingWebServiceURL nvarchar(1024) Null Địa chỉ URL của đại lý.
ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

 

10. Bảng VedorAddress

Tên trường Kiểu DL Nullability Mô tả
VendorID int Not null Primary key. Khóa ngoại tham chiếu đến Vendor.VendorID.
AddressID int Not null Primary key. Khóa ngoại tham chiếu đến Address.AddressID.
AddressTypeID int Not null Mã kiểu địa chỉ. Khóa ngoại tham chiếu đến AddressType.AddressTypeID.
ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

 

11. Bảng VendorContact

Tên trường Kiểu DL Nullability Mô tả
VendorID int Not null Primary key.
ContactID int Not null Mã số liên lạc, nhân viên của đại. Khóa ngoại tham chiếu đến Contact.ContactID.
ContactTypeID int Not null Kiểu liên hệ như: quản lý bán hàng, hoặc đại lý bán hàng.
ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

 

 

II. CÁC BẢNG DỮ LIỆU TRONG CSDL MANUFACTURING

Schema.Table Chứa các loại thông tin Chú thích
Production.BillOfMaterials A list of all the components used to manufacture bicycles and bicycle subassemblies.

danh sách tất cả các thành phần được sử dụng để sản xuất xe đạp và lắp ráp xe đạp

 

There is an intrinsic recursive relationship in the bill of material structure that indicates the relationship between a parent product and the components that make up that product. For example, if the parent product is a bicycle, the first-level component might be a wheel assembly. The wheel assembly has its own components, such as reflectors, rims, spokes, tires, and tire tubes.

The ProductAssemblyID column represents the parent, or primary, product and ComponentID represents the child, or individual, parts used to build the parent assembly.

The BOM_Level column indicates the level of the ComponentID relative to the ProductAssemblyID. In the previous example, the wheel assembly would have a BOM_Level of 1, the components of the wheel assembly would have a BOM_Level of 2, and so on.

Có một mối quan hệ nội tại trong hóa đơn của cấu trúc vật chất cho biết mối quan hệ giữa một sản phẩm chính và các thành phần tạo nên sản phẩm đó. Ví dụ, nếu sản phẩm chính là một chiếc xe đạp, các thành phần cấu tạo có thể là một bánh xe lắp ráp. Việc lắp ráp xe có các thành phần riêng của mình, vành, căm, lốp, lốp xe .
Cột ProductAssemblyID là ID của sản phẩm chính còn ComponentID là ID của thành phần con, bộ phận sử dụng để lắp ráp thành sản phẩm chính.

 

The BOM_Level column indicates the level of the ComponentID relative to the ProductAssemblyID. In the previous example, the wheel assembly would have a BOM_Level of 1, the components of the wheel assembly would have a BOM_Level of 2, and so on.
Cột BOM_Level cho thấy mức độ quan hệ của các ComponentID so với ProductAssemblyID. Trong ví dụ trước, bánh xe lắp ráp sẽ có một BOM_Level số 1, các thành phần của bánh xe lắp ráp sẽ có một BOM_Level số 2, …

Production.Document Engineering specifications and other technical documentation.

Các thong số kỹ thuật và tài liệu kỹ thuật khác

The DocumentSummary column uses the varchar(max) data type. The Document column uses the varbinary(max) data type.

Cột DocumentSummary sử kiểu dữ liệu varchar (max). Cột tài liệu sử dụng  kiểu dữ liệu varbinary[Nhị phân].

Production.Illustration Bicycle manufacturing illustrations.

Các minh họa sản xuất xe đạp

The illustrations are rendered in the manufacturing instructions that are contained in the ProductModel table. This column uses the xml data type.

 

Các minh họa được đưa ra trong các hướng dẫn sản xuất được chứa trong bảng ProductModel. cột này sử dụng các kiểu dữ liệu xml

Production.Location A list of inventory and manufacturing areas within Adventure Works Cycles in which the products and parts are stored as inventory or built. For example, paint is stored in both the Paint Storage location in the warehouse and in the manufacturing work center, Paint Shop, where the bicycle frames are painted.

Một danh sách các kho và vùng sản xuất trong  đó các sản phẩm và các bộ phận được lưu trữ như hàng tồn kho hoặc được chế tạo. Ví dụ, sơn được lưu trữ ở cả hai vị trí của Sơn lưu trữ trong kho và tại các trung tâm công việc sản xuất, cửa hàng sơn, nơi mà các khung xe đạp được sơn

 

 
Production.Product Information about each product sold by Adventure Works Cycles or used to manufacture Adventure Works Cycles bicycles and bicycle components.

???

 

The FinishedGoodsFlag column indicates whether a product is sold. Products that are not sold are components of a product that is sold. For example, a bicycle would be sold, but the sheet of metal used to create the bicycle frame would not.

 

Cột FinishedGoodsFlag cho biết liệu một sản phẩm được bán ra. Sản phẩm không bán được là các thành phần của một sản phẩm được bán ra. Ví dụ, một chiếc xe đạp sẽ được bán, nhưng bảng tính của kim loại được sử dụng để tạo ra các khung xe đạp thì không.

 

Production.ProductInventory The inventory level of products by their location. See Production.Location previously mentioned.

Mức tồn kho của các sản phẩm do vị trí của họ. Xem Production.Location đề cập trước đó.

 
Production.ProductModel The product models associated with products. For example, Mountain-100 or LL Touring Frame.

Các mô hình liên kết sản phẩm với các sản phẩm. Ví dụ, Sản phẩm neo núi hoặc đi du lịch.

The CatalogDescription column contains additional product information by using the xml data type. The Instructions column contains product manufacturing instructions by using the xml data type

 

Cột CatalogDescription chứa thông tin sản phẩm bổ sung bằng cách sử dụng các kiểu dữ liệu xml. Cột Instructions chứa các hướng dẫn sản xuất sản phẩm bằng cách sử dụng các kiểu dữ liệu xml

Production.ScrapReason A list of common reasons why bicycles or bicycles parts are rejected during the manufacturing process. For example, the scrap reason ‘Paint failed’ is used in the Paint work center to reject a bicycle frame for which the paint did not cure correctly.

 

Một danh sách các lý do phổ biến tại sao xe đạp hoặc các bộ phận của nó phần bị lỗi trong quá trình sản xuất. Ví dụ, lý do phế liệu ‘Lỗi sơn’ được sử dụng trong các trung sơn để từ chối một khung xe đạp mà sơn không được.

The WorkOrderRouting table tracks the quantity scrapped and the reason for scrapping by product.

Depending on the severity of the problem, the product must be fixed or replaced before the product can move to the next work center.

Bảng WorkOrderRouting theo dõi số lượng loại bỏ và lý do để tháo dỡ theo sản phẩm.
Tùy thuộc vào mức độ nghiêm trọng, sản phẩm phải được sửa chữa hoặc thay thế trước khi các sản phẩm có thể di chuyển đến trung tâm làm việc tiếp theo.

Production.WorkOrder Defines the products and quantity that must be manufactured to meet current and forecasted sales.

 

Xác định các sản phẩm và số lượng đó phải được sản xuất để đáp ứng doanh số bán hàng hiện tại và dự báo cho tương lai

 
Production.WorkOrderRouting The details for each work order. This includes the sequence of work centers the product travels through in the manufacturing or assembly process. For example, bicycle handlebars are manufactured in the Frame Forming work center. They are moved to the Frame Welding work center for additional work, and then moved to the Subassembly work center, where they are added to the bicycle frame.

 

Các chi tiết cho mỗi đơn hàng làm. Điều này bao gồm các trình tự của các trung tâm làm việc sản phẩm đi qua trong quá trình sản xuất, lắp ráp. Ví dụ, tay lái xe đạp được sản xuất ở trung tâm Khung làm việc Hình thành. Rồi chuyển đến khu vực  hàn các phần bổ xung bổ sung, và sau đó di chuyển đến trung tâm làm việc lắp ráp, nơi mà chúng được lắp vào các khung xe đạp

 

 

1. Production.BillOfMaterials

Cột Data type Nullability Description
BillOfMaterialsID int Not null Primary key.
ProductAssemblyID int Not null Mã số của sản phẩm cha (sản phầm dùng để sản xuất sản phẩm này). Khóa ngoại chiếu đến Product.ProductID.
ComponentID int Null Mã số của chi tiết sản phẩm. Khóa ngoại tham chiếu đến Product.ProductID.
StartDate datetime Not null Ngày thành phần bắt đầu được sử dụng trong các sản phẩm lắp ráp.
EndDate datetime Null Ngày thành phần dừng sử dụng trong các sản phẩm lắp ráp.
UnitMeasureCode nchar(3) Not null Standard code identifying the unit of measure for the quantity.

Mã chuẩn của đơn vị đo số lượng

BOMLevel smallint Not null Indicates the depth the component is from its parent (ProductAssemblyID).

Số tầng của thành phần tính từ cha của nó

PerAssemblyQty decimal(8,2) Not null Quantity of the component needed to create the assembly.

Số lượng các thành phần cần thiết để tạo ra sản phẩm

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

2. Production.Document

Cột Data type Nullability Description
DocumentID int Not null Primary key.
Title nvarchar(50) Not null Title của tài liệu.
FileName nvarchar(400) Not null Đường dẫn thư mục và tên file của tài liệu.
FileExtension nvarchar(8) Not null Phần mở rộng chỉ kiểu file của tài liệu. Ví dụ, .doc hoặc .txt.
Revision nvarchar(5) Not null Revision number of the document.

Số lần xem lại tài liệu

ChangeNumber int Not null Engineering change approval number.

Số lần sửa đổi

Status tinyint Not null 1 = Pending approval : đang sửa đổi

2 = Approved : hoàn thiện

3 = Obsolete : Hết hạn

DocumentSummary nvarchar(max) Null Document abstract.

Tóm tắt tài liệu

Document varbinary(max) Null Complete document file.

Dữ liệu file đầy đủ(Lưu nhị phân)

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

3. Production.Illustration

Cột Data type Nullability Description
IllustrationID int Not null Primary key for Illustration rows.

Khóa chính

Diagram xml Null Illustrations used in manufacturing instructions. Stored in XML format. For more information, see About the Illustration.Diagram xml Column.

Những minh họa sử dụng trong các chỉ dẫn sản xuất. được lưu trong file XML. [Xem them Illustration.Diagram xml Column ]

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

4. Production.Location

Cột Data type Nullability Description
LocationID int Not null Primary key for Location records.

Khóa chính

Name Name (user-defined type)

nvarchar(50)

Not null Location description.

Mô tả vị trí

CostRate smallmoney Not null Standard hourly cost of the manufacturing location.

Tiêu chuẩn chi phí cho địa điểm sản xuất/giờ

Availability decimal(8,2) Not null Work capacity (in hours) of the manufacturing location.

Khả năng làm việc (theo giờ) của địa điểm sản xuất

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

5. Production.Product

Cột Data type Nullability Description
ProductID int Not null Primary key for Product rows.

Khóa chính

Name Name (user-defined type)

nvarchar(50)

Not null Name of the product.

Tên sản phẩm

ProductNumber nvarchar(25) Not null Unique product identification number.

Mã sản phẩm

MakeFlag Flag (user-defined type)

bit

Not null 0 = Product is purchased. : Đã bán

1 = Product is manufactured in-house. : Trong kho(chưa bán)

FinishedGoodsFlag Flag (user-defined type)

bit

Not null 0 = Product is not a salable item. Sản phẩm khó bán

1 = Product is salable. : Sản phẩm có thể bán

Color nvarchar(15) null Product color.

Mầu sản phẩm

SafetyStockLevel smallint Not null Minimum inventory quantity.

Số lượng tồn kho bé nhất cho phép

ReorderPoint smallint Not null Inventory level that triggers a purchase order or work order.

Mức tồn kho để ta đưa quyết định mua hoặc sản xuất

StandardCost money Not null Standard cost of the product.

Gía chuẩn của sản phẩm

ListPrice money Not null Selling price.

Giá đang bán

Size nvarchar(5) null Product size.

Kích thước sản phẩm

SizeUnitMeasureCode nchar(3) null Unit of measure for Size column.

Đơn vị đo kích thước cột

WeightUnitMeasureCode nchar(3) null Unit of measure for Weight column.

Đơn vị đo khối lượng cột

Weight decimal (8,2) null Product weight.

Khối lượng sản phẩm

DaysToManufacture int Not null Number of days required to manufacture the product.

Số ngày yêu cầu để sản xuất ra sản phẩm

ProductLine nchar(2) null R = Road : Đồng bằng

M = Mountain : Miền núi

T = Touring : Phục vụ du lịch

S = Standard : Bình dân

Class nchar(2) null H = High

M = Medium

L = Low

Style nchar(2) null W = Women’s : Nữ

M = Men’s : Nam

U = Universal : Nam nữ đều được

ProductSubcategoryID smallint null Product is a member of this product subcategory. Foreign key to ProductSubCategory.ProductSubCategoryID.

 

Mã của nhóm con

ProductModelID int null Product is a member of this product model. Foreign key to ProductModel.ProductModelID.

Mã Model

SellStartDate datetime Not null Date the product was available for sale.

Ngày sản phẩm có thể đem ra bán

SellEndDate datetime null Date the product was no longer available for sale.

Ngày sản phẩm hết hạn

DiscontinuedDate datetime null Date the product was discontinued.

Ngày ngừng sản xuất sản phẩm

rowguid uniqueidentifier ROWGUIDCOL Not null ROWGUIDCOL number uniquely identifying the row. Used to support a merge replication sample.

Trường này chứa thong tin xác định duy nhất hàng[Khóa]. Được sử dụng để một kết hợp mẫu nhân rộng

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

6. Production.ProductInventory

Cột Data type Nullability Description
ProductID int Not null Product identification number. Foreign key to Product.ProductID.

Khóa

LocationID smallint Not null Inventory location identification number. Foreign key to Location.LocationID.

Mã vị trí cất sản phẩm trong kho

Shelf nvarchar(10) Not null Storage compartment within an inventory location.

 

Bin tinyint Not null Storage container on a shelf in an inventory location.
Quantity smallint Not Null Quantity of products in the inventory location.
rowguid uniqueidentifier ROWGUIDCOL Not null ROWGUIDCOL number uniquely identifying the row. Used to support a merge replication sample.

Trường này chứa thong tin xác định duy nhất hàng[Khóa]. Được sử dụng để một kết hợp mẫu nhân rộng

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

7. Production.ProductModel

Cột Data type Nullability Description
ProductModelID int Not null Primary key for ProductModel rows.

Khóa chính cho ProductModel

Name Name (user-defined type)

nvarchar(50)

Not null Product model description.

 

Mô tả Model sản phẩm

CatalogDescription xml Null Detailed product catalog information in XML format. For more information, see About the ProductModel.CatalogDescription xml Column.

 

Danh mục thông tin chi tiết trong file XML[Tham khảo : ProductModel.CatalogDescription xml Column]

Instructions xml Null Manufacturing instructions in XML format. For more information, see About the ProductModel.Instructions xml Column.

Chỉ dẫn sản xuất trong file XML[Tham khảo : ProductModel.Instructions xml Column ]

rowguid uniqueidentifier ROWGUIDCOL Not null ROWGUIDCOL number uniquely identifying the row. Used to support a merge replication sample.

Trường này chứa thong tin xác định duy nhất hàng[Khóa]. Được sử dụng để một kết hợp mẫu nhân rộng

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

8. Production.ScrapReason

Cột Data type Nullability Description
ScrapReasonID smallint Not null Primary key.

Khóa chính

Name Name (user-defined type)

nvarchar(50)

Not null Failure description.

Mô tả lỗi

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

9. Production.WorkOrder

Cột Data type Nullability Description
WorkOrderID int Not null Primary key.

Khóa chính

ProductID int Not null Product identification number. Foreign key to Product.ProductID.

Số nhận dạng sản phẩm

OrderQty int Not null Product quantity to build.

Yêu cầu chất lượng sản phẩm

StockedQty int Not null Quantity built and put in inventory.

Số lượng sản xuất cất kho

ScrappedQty smallint Not null Quantity that failed inspection.

Số lượng lỗi khi kiểm tra

StartDate datetime Not null Work order start date.

Ngày đặt hàng

EndDate datetime Null Work order end date.

Ngày giao hàng

DueDate datetime Not null Work order due date.

 

ScrapReasonID smalllint Null Reason the product failed inspection.

 

Foreign key to Production.ScrapReason.

Nguyên nhân lỗi sản phẩn khi kiểm tra

Có khóa ngoại trong bảng Production là Production.ScrapReason

 

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

10. Production.WorkOrderRouting

Cột Data type Nullability Description
WorkOrderID int Not null Primary key. Foreign key to WorkOrder.WorkOrderID.

Khóa ngoại : WorkOrder.WorkOrderID

ProductID int Not null Primary key. Product identification number. Foreign key to Product.ProductID.

Khóa chính : Số nhận dạng sản phẩm(Mã sản phẩm) . có khóa ngoại trong bảng {Product}

OperationSequence smallint Not null Primary key. Indicates the manufacturing process sequence.

Khóa chính : Cho biết chuỗi sản xuất

LocationID smallint Not null Manufacturing location where the part is processed. Foreign key to Location.LocationID.

Vị trí sản xuất

ScheduledStartDate datetime Not null Planned manufacturing start date.

Ngày bắt đầu sản xuất theo lịch

ScheduledEndDate datetime Not null Planned manufacturing end date.

Ngày kết thúc sản xuất theo lịch

ActualStartDate datetime Null Actual manufacturing start date.

Ngày bắt đầu sản xuất thực tế

ActualEndDate datetime Null Actual manufacturing end date.

Ngày kết thúc sản xuất thực tế

ActualResourcesHrs decimal (9,4) Null Number of manufacturing hours used by the work center to produce the product.

Thời gian cần để sản xuất ra sản phẩm

PlannedCost money Not null Estimated manufacturing cost per work center to produce the product.

Ước lượng giá thành cho sản phẩm

ActualCost money Null Actual manufacturing cost per work center to produce the product.

Giá thành thực của sản phẩm

ModifiedDate datetime Not null Thời gian bản ghi được cập nhật lần cuối.

 

Câu 1:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

1. Liệt kê các sản phẩm mà đại lý  “Compete, Inc.” (VendorID =12) cung cấp.

2. Liệt kê thông tin của tất cả các đại lý hiện tại không được sử dụng.

 

Câu 2:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

1: Hãy liệt kê các đại lý có trang web hỗ trợ dịch vụ mua bán.

2: Hãy liệt kê các đơn hàng phải vận chuyển trong ngày 26/05/2001.

 

Câu 3:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

1: Hãy liệt kê các đơn hàng phải vận chuyển trong ngày đặt hàng.

2: Hãy liệt kê các đơn hàng bị từ chối trong tháng 2/2002.

 

Câu 4:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

1: Xoá các chi tiết đơn hàng có số lượng bị từ chối bằng số lượng đặt mua.

2: Cập nhật lại giá trị trường StoctedQty  = ReceivedQty – RejectedQty trong bảng PurchaseOrderDetail.

 

Câu 5:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

1: Cập nhật lại trường TotalDue = SubTotal + TaxAmt + Freight trong bảng PurchaseOrderHeader.

2: Liệt kê các mặt hàng của đại lý “Beaumont Bikes” (có VendorID=13) có đơn vị tính (UnitMeasureCode) là “CAN”.

 

Câu 6:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

1. Đếm xem đại lý “Beaumont Bikes” (có VendorID=13) cung cấp bao nhiêu loại mặt hàng.

2. Liệt kê các đại lý mà tên có chứa từ “sport”.

 

Câu 7:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

1. Hãy liệt kê các sản phẩm không phải sơn màu.

2. Hãy liệt kê các sản phẩm bị từ chối vì lý do màu sắc không đúng quy định.

 

Câu 8:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

1. Hãy liệt kê các sản phẩm có màu “Silver”.

2. Tìm các sản phẩm bị từ chối vì lý do kích thước không đúng quy định (quá to hoặc quá nhỏ so với quy định).

 

 

Câu 9:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

1. Hãy tìm các sản phẩm dành cho phái nam.

2. Tính tổng số lượng sản phẩm “BB Ball Bearing” (ProductID =3) bị loại, có EndDate thuộc quý I năm 2002 .

 

 

Câu 10:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

1. Tính tổng số lượng sản phẩm “Headset Ball Bearings” (ProductID =4) có trong kho.

2. Liệt kê các vị trí các kho có lưu trữ sản phẩm “Chainring Bolts” (có ProductID = 320).

 

 

Câu 11:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

1. Liệt kê các vị trí sản xuất trong quy trình không diễn ra theo đúng kế hoạch (có ngày chính thức bắt đầu thực hiện (ActualStartDate) khác với ngày bắt đầu thực hiện theo kế hoạch).

2. Liệt kê các sản phẩm bắt đầu bằng từ “Lock”.

 

 

Câu 12:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

1. Liệt kê các sản phẩm có thời hạn bán là vô hạn (SellEndDate là NULL).

2. Liệt kê các sản phẩm có khoảng thời gian bán nhỏ hơn 1 năm.

 

 

—————————Phan I

——————–bai 1

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

–1.1. Liệt kê các sản phẩm mà đại lý  “Compete, Inc.” (VendorID =12) cung cấp.

–cach 1: liet ke san pham ma dai ly la Compete, Inc.

SELECT     Purchasing.Vendor.VendorID, Purchasing.Vendor.Name AS namevendor,

Purchasing.ProductVendor.ProductID,Production.Product.Name AS nameproduct

FROM         Purchasing.Vendor INNER JOIN

Purchasing.ProductVendor ON Purchasing.Vendor.VendorID = Purchasing.ProductVendor.VendorID INNER JOIN

Production.Product ON Purchasing.ProductVendor.ProductID = Production.Product.ProductID

WHERE     (Purchasing.Vendor.Name = ‘Compete, Inc.’)

–cach 2: liet ke san pham ma dai ly co ID =12

SELECT     Purchasing.Vendor.VendorID, Purchasing.Vendor.Name AS namevendor,

Purchasing.ProductVendor.ProductID,Production.Product.Name AS nameproduct

FROM         Purchasing.Vendor INNER JOIN

Purchasing.ProductVendor ON Purchasing.Vendor.VendorID = Purchasing.ProductVendor.VendorID INNER JOIN

Production.Product ON Purchasing.ProductVendor.ProductID = Production.Product.ProductID

WHERE     (Purchasing.Vendor.VendorID = ’12’)

 

–1.2. Liệt kê thông tin của tất cả các đại lý hiện tại không được sử dụng.

select VendorID , Name from Purchasing.Vendor where ActiveFlag=0

———————-bai 2:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

–bai 2.1: Hãy liệt kê các đại lý có trang web hỗ trợ dịch vụ mua bán.

SELECT     VendorID, Name, PurchasingWebServiceURL

FROM         Purchasing.Vendor

WHERE     (PurchasingWebServiceURL <> ”)–khi truong web khac null

 

 

 

–bai 2.2: Hãy liệt kê các đơn hàng phải vận chuyển trong ngày 26/05/2001.

–SELECT     PurchaseOrderID, ShipDate

–FROM         Purchasing.PurchaseOrderHeader

–WHERE     (ShipDate = ‘2001-05-26’)

 

use VendorAndPurchasing

SELECT     PurchaseOrderID, ShipDate

FROM         Purchasing.PurchaseOrderHeader

WHERE             day(ShipDate)=26 and month(ShipDate) = 5 and year(ShipDate)=2001

 

 

 

 

———————-Bai 3:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

–bai 3.1: Hãy liệt kê các đơn hàng phải vận chuyển trong ngày đặt hàng.

 

 

SELECT     PurchaseOrderID, ShipDate, OrderDate

FROM         Purchasing.PurchaseOrderHeader

WHERE     day(ShipDate)=day(OrderDate) and month(ShipDate)=month(OrderDate) and year(ShipDate)=year(OrderDate)

 

 

–bai3.2: Hãy liệt kê các đơn hàng bị từ chối trong tháng 2/2002.

–Cach1:

SELECT     PurchaseOrderID, ShipDate, OrderDate, Status

FROM         Purchasing.PurchaseOrderHeader

WHERE     (Status = ‘3’) –Status=3: don hang bi tu choi.

AND (MONTH(OrderDate) = ‘2’)– don hang trong thang 2

AND (YEAR(OrderDate) = ‘2002’)– nam 2002

–Cach 2:

SELECT     PurchaseOrderID, ShipDate, OrderDate, Status

FROM         Purchasing.PurchaseOrderHeader

WHERE     (Status = ‘3’)

AND (OrderDate BETWEEN ‘2002-02-01’ AND ‘2002-02-28’)–dung between

— câu 4:–

— phần 1–

— Xoá các chi tiết đơn hàng có số lượng bị từ chối bằng số lượng đặt mua–

delete from Purchasing.PurchaseOrderDetail where OrderQty = RejectedQty

— đầu tiên xóa các bản ghi trong bảng  PurchaseOrderDetail với điều kiện OrderQty = RejectedQty( số lượng bị từ chối bằng số lượng đặt)–

delete from Purchasing.PurchaseOrderHeader where PurchaseOrderID not in (select PurchaseOrderID from Purchasing.PurchaseOrderDetail )

— xóa các hóa đơn mà không có PurchaseOrderID trong bảng PurchaseOrderDetail —

 

— phần 2 : Cập nhật lại giá trị trường StoctedQty  = ReceivedQty – RejectedQty trong bảng PurchaseOrderDetail.–

use VendorAndPurchasing

update Purchasing.PurchaseOrderDetail

set

 

StockedQty = ReceivedQty – RejectedQty

 

 

 

 

— Câu 5–

— Phần 1: Cập nhật lại trường TotalDue = SubTotal + TaxAmt + Freight trong bảng PurchaseOrderHeader —

 

update Purchasing.PurchaseOrderHeader

set

TotalDue = SubTotal + TaxAmt + Freight

 

— Phần 2:Liệt kê các mặt hàng của đại lý “Beaumont Bikes” (có VendorID=13) có đơn vị tính (UnitMeasureCode) là “CAN”.–

use VendorAndPurchasing

SELECT     Purchasing.ProductVendor.ProductID,

Production.Product.ProductNumber, Production.Product.Name

FROM         Purchasing.ProductVendor INNER JOIN

Purchasing.Vendor ON Purchasing.ProductVendor.VendorID = Purchasing.Vendor.VendorID INNER JOIN

Production.Product ON Purchasing.ProductVendor.ProductID = Production.Product.ProductID

WHERE Purchasing.Vendor.Name = ‘Beaumont Bikes’ and Purchasing.ProductVendor.UnitMeasureCode = ‘CAN’

 

 

 

 

 

 

— Câu 6: —

 

–Phần 1: Đếm xem đại lý “Beaumont Bikes” (có VendorID=13) cung cấp bao nhiêu loại mặt hàng —

use VendorAndPurchasing

SELECT count(distinct (Purchasing.ProductVendor.ProductID)) [Số mặt hàng]

FROM         Purchasing.ProductVendor INNER JOIN

Purchasing.Vendor ON Purchasing.ProductVendor.VendorID = Purchasing.Vendor.VendorID

WHERE Purchasing.Vendor.Name = ‘Beaumont Bikes’

 

 

— Phần 2: Liệt kê các đại lý mà tên có chứa từ “sport”.–

SELECT     VendorID, AccountNumber, Name, CreditRating, PreferredVendorStatus, ActiveFlag, PurchasingWebServiceURL, ModifiedDate

FROM         Purchasing.Vendor

where Name like ‘%sport%’

— Cau 7

—-1

use Manufacturing

select * from Production.Product where Color is Null

—-2:Cac san pham bi loai thi ScrapReasonID trong bang WorkOrder != null va ly do bi loai la SrapReason.Name va So luong bi loai la ScrappedQty

——-Mau sac khong dung quy dinh thi ScrapReason.Name la ‘Color incorrect’

—– => phai join bang Product,WordOrder va ScrapReason

SELECT     Production.WorkOrder.ProductID, Production.Product.Name, Production.Product.ProductNumber, Production.ScrapReason.Name AS ReasonName

FROM         Production.Product INNER JOIN

Production.WorkOrder ON Production.Product.ProductID = Production.WorkOrder.ProductID INNER JOIN

Production.ScrapReason ON Production.WorkOrder.ScrapReasonID = Production.ScrapReason.ScrapReasonID

WHERE     (Production.ScrapReason.Name LIKE ‘Color incorrect’)

 

 

 

— Cau 8

—-1

select * from Production.Product where Color = ‘Silver’

—-2:Kich thuoc ko dung quy dinh thi ScrapReason.Name =’Drill size too large’ or ‘Drill size too small’

SELECT     Production.WorkOrder.ProductID, Production.Product.Name, Production.Product.ProductNumber, Production.ScrapReason.Name AS ReasonName

FROM         Production.Product INNER JOIN

Production.WorkOrder ON Production.Product.ProductID = Production.WorkOrder.ProductID INNER JOIN

Production.ScrapReason ON Production.WorkOrder.ScrapReasonID = Production.ScrapReason.ScrapReasonID

WHERE     (Production.ScrapReason.Name like ‘Drill size too large’ or Production.ScrapReason.Name like ‘Drill size too small’)

 

 

 

–Cau 9

 

 

——1.Tim mai ko thay co cot nao la sex ma lam :))

— sản phẩm mà có stype =M là sản phầm danh cho nam

select * from Production.Product

where Style=’M’

 

 

——2.’BB Ball Bearing'(ID = 3) ma bi loai => WorkOrder.ScrapReasonID != null va So luong bi loai la ScrappedQty

SELECT     SUM(ScrappedQty) AS SoLuongBallBearingBiLoai

FROM         Production.WorkOrder

WHERE     (ProductID = 3) AND (EndDate BETWEEN ‘2002-1-1’ AND ‘2002-3-31’)

—-Cau 10.a Tính tổng số lượng sản phẩm “Headset Ball Bearings” (ProductID =4) có trong kho.

use Manufacturing

SELECT SUM(Quantity) AS [Quantity] FROM Production.ProductInventory WHERE ProductID =4

 

—-Cau 10.b Liệt kê các vị trí các kho có lưu trữ sản phẩm “Chainring Bolts” (có ProductID = 320).

SELECT     LocationID, Name FROM Production.Location where LocationID in

(SELECT LocationID FROM Production.ProductInventory WHERE ProductID = 320)

 

 

 

—-Cau 11.a Liệt kê các vị trí sản xuất trong quy trình không diễn ra theo đúng kế hoạch (có ngày chính thức bắt đầu

—        thực hiện (ActualStartDate) khác với ngày bắt đầu thực hiện theo kế hoạch).

SELECT     LocationID, Name FROM Production.Location where LocationID in(

SELECT LocationID FROM Production.WorkOrderRouting where ScheduledStartDate != ActualStartDate)

 

—-Cau 11.b Liệt kê các sản phẩm bắt đầu bằng từ “Lock”.

SELECT Name FROM Production.Product where Name Like ‘Lock%’

 

 

–Câu hỏi 12:

–Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

–1. Liệt kê các sản phẩm có thời hạn bán là vô hạn (SellEndDate là NULL).

SELECT     ProductID, Name FROM   Production.Product WHERE (SellEndDate IS NULL)

–2. Liệt kê các sản phẩm có khoảng thời gian bán nhỏ hơn 1 năm.

use Manufacturing

Select * From Production.Product

Where SellStartDate Is Not Null

And SellEndDate Is Not Null

And DATEDIFF(day, SellStartDate, SellEndDate) < 365

Câu 1:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Hãy liệt kê tất cả các đại lý (vendor) và địa chỉ của chúng

 

Câu 2:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Hãy liệt kê tất cả các sản phẩm cung cấp bởi các đại lý.

 

Câu 3:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Hãy liệt kê tất cả các địa chỉ liên hệ của các đại lý (vendor). Địa chỉ liên hệ của các đại lý là bộ phận nhân viên tương tác đến các bộ phận đặt hàng và sản phẩm.

 

Câu 4:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Hãy liệt kê các đại lý có nhiều hơn 10 cửa hàng hỗ trợ bán hàng. (Cửa hàng hỗ trợ bán hàng có ContactTypeId là 2).

 

Câu 5:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Hãy liệt kê các nhân viên không lập được đơn hàng nào trong tháng 5/2001.

 

Câu 6:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Tính tổng cước vận chuyển mà đại lý “Mountain Works” phải chi phí từ tháng 1 đến tháng 3 năm 2004.

 

Câu 7:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Hãy liệt kê tên, vị trí, số lượng các sản phẩm tồn trong các kho, sắp xếp kết quả theo tên sản phẩm.

 

Câu 8:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Liệt kê các nguyên nhân bị  loại của sản phẩm “BB Ball Bearing”.

 

 

Câu 9:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Hãy liệt kê các vị trí đã từng có trong quy trình sản xuất sản phẩm “LL Fork”.

 

 

Câu 10:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

Hãy liệt kê thông tin cơ bản và Model của các sản phẩm cho nữ.

 

 

Câu 11:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Liệt kê ra các sản phẩm có tổng số lượng tồn kho lớn hơn 1000.

 

 

Câu 12:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

Hãy liệt kê ra các thông tin cơ bản và Model của các sản phẩm.

 

 

 

————————-Phan II (2D):———————–

 

 

————————-Bai 1:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

— Hãy liệt kê tất cả các đại lý (vendor) và địa chỉ của chúng

SELECT     Purchasing.VendorAddress.VendorID, Purchasing.Vendor.Name AS NAMEVENDOR,

Person.Address.AddressLine1, Person.Address.AddressLine2, Person.Address.City

–Liet ke trong 2 bang: VendorAddress, Vendor

from Purchasing.VendorAddress ,Person.Address,Purchasing.Vendor

where Purchasing.VendorAddress.AddressID = Person.Address.AddressID

and Purchasing.VendorAddress.VendorID = Purchasing.Vendor.VendorID

 

 

 

 

 

————————-Bai 2:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

— Hãy liệt kê tất cả các sản phẩm cung cấp bởi các đại lý.

SELECT     Purchasing.Vendor.VendorID, Purchasing.Vendor.Name,

Purchasing.ProductVendor.ProductID, Production.Product.Name AS nameproduct

FROM         Purchasing.Vendor INNER JOIN

Purchasing.ProductVendor ON Purchasing.Vendor.VendorID = Purchasing.ProductVendor.VendorID INNER JOIN

Production.Product ON Purchasing.ProductVendor.ProductID = Production.Product.ProductID

 

 

 

 

 

 

————————-Bai 3:

–Câu hỏi:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

— Hãy liệt kê tất cả các địa chỉ liên hệ của các đại lý (vendor).

— Địa chỉ liên hệ của các đại lý là bộ phận nhân viên tương tác đến các bộ phận đặt hàng và sản phẩm.

–SELECT     Purchasing.Vendor.VendorID, Purchasing.Vendor.Name, Person.Address.AddressLine1,

—                                  Person.Address.AddressLine2, Person.Address.City,Purchasing.VendorContact.ContactID,

—                                  Person.Contact.FirstName, Person.Contact.MiddleName, Person.Contact.LastName,

—            Person.Contact.EmailAddress

–FROM         Purchasing.Vendor INNER JOIN

—                      Purchasing.VendorContact ON Purchasing.Vendor.VendorID = Purchasing.VendorContact.VendorID INNER JOIN

—                      Person.Contact ON Purchasing.VendorContact.ContactID = Person.Contact.ContactID AND

—                      Purchasing.VendorContact.ContactID = Person.Contact.ContactID INNER JOIN

—                      Purchasing.VendorAddress ON Purchasing.Vendor.VendorID = Purchasing.VendorAddress.VendorID AND

—                      Purchasing.Vendor.VendorID = Purchasing.VendorAddress.VendorID INNER JOIN

—                      Person.Address ON Purchasing.VendorAddress.AddressID = Person.Address.AddressID AND

—                      Purchasing.VendorAddress.AddressID = Person.Address.AddressID

 

use VendorAndPurchasing

SELECT Purchasing.Vendor.VendorID, Purchasing.Vendor.Name AS [Name Vendor],

Purchasing.VendorContact.ContactID,

Person.Contact.FirstName, Person.Contact.MiddleName, Person.Contact.LastName,

Person.Contact.EmailAddress

 

FROM Purchasing.Vendor INNER JOIN

Purchasing.VendorContact ON Purchasing.Vendor.VendorID = Purchasing.VendorContact.VendorID INNER JOIN

Person.Contact ON Purchasing.VendorContact.ContactID = Person.Contact.ContactID AND

Purchasing.VendorContact.ContactID = Person.Contact.ContactID

–Câu 4:

–ta sẽ lọc các đại lý mà có ContactTypeID =2 trước

–sau đó sẽ gom nhóm theo VendorID

— sẽ lấy những đại lý nào có count(ContactTypeID)>10

 

 

SELECT     Purchasing.VendorContact.VendorID, Purchasing.Vendor.Name, COUNT(Purchasing.VendorContact.ContactTypeID) AS tongdl

FROM         Purchasing.VendorContact INNER JOIN

Purchasing.Vendor ON Purchasing.VendorContact.VendorID = Purchasing.Vendor.VendorID

WHERE     (Purchasing.VendorContact.ContactTypeID = 2)

GROUP BY Purchasing.VendorContact.VendorID, Purchasing.Vendor.Name

HAVING      (COUNT(Purchasing.VendorContact.ContactTypeID) > 10)

 

 

 

–Câu hỏi 5:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

— Hãy liệt kê các nhân viên không lập được đơn hàng nào trong tháng 5/2001.

use VendorAndPurchasing

select hre.EmployeeID, pc.FirstName, pc.MiddleName, pc.LastName

from HumanResources.Employee as hre

inner join Person.Contact as pc

on hre.ContactID = pc.ContactID

where hre.EmployeeID not in

(select ppo.EmployeeID

from Purchasing.PurchaseOrderHeader as ppo

where MONTH(OrderDate) = 5 and YEAR(OrderDate) = 2001)

 

———

 

–Câu hỏi 6:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

— Tính tổng cước vận chuyển mà đại lý “Mountain Works” phải chi phí từ tháng 1 đến tháng 3 năm 2004.

 

SELECT SUM(Purchasing.PurchaseOrderHeader.Freight)AS [Chi phi]

FROM         Purchasing.PurchaseOrderHeader INNER JOIN

Purchasing.Vendor ON Purchasing.PurchaseOrderHeader.VendorID = Purchasing.Vendor.VendorID

WHERE     (Purchasing.PurchaseOrderHeader.Status= 4)AND(Purchasing.Vendor.Name =N’Mountain Works’)AND(MONTH(Purchasing.PurchaseOrderHeader.OrderDate)

BETWEEN 1 AND 3)AND(YEAR(Purchasing.PurchaseOrderHeader.OrderDate)= 2004)

 

 

 

 

–Câu hỏi 7:

–Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

— Hãy liệt kê tên, vị trí, số lượng các sản phẩm tồn trong các kho, sắp xếp kết quả theo tên sản phẩm.

 

use Manufacturing

SELECT distinct TOP (100)PERCENT Production.Product.Name, Production.Location.Name AS Expr1, Production.ProductInventory.Quantity

FROM         Production.ProductInventory INNER JOIN

Production.Location ON Production.ProductInventory.LocationID = Production.Location.LocationID INNER JOIN

Production.Product ON Production.ProductInventory.ProductID = Production.Product.ProductID

ORDER BY Production.Product.Name

 

 

 

 

–Câu hỏi 8:

–Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

— Liệt kê các nguyên nhân bị  loại của sản phẩm “BB Ball Bearing”.

 

SELECT distinct TOP (100)PERCENT Production.ScrapReason.Name

FROM         Production.ScrapReason INNER JOIN

Production.WorkOrder ON Production.ScrapReason.ScrapReasonID = Production.WorkOrder.ScrapReasonID INNER JOIN

Production.Product ON Production.WorkOrder.ProductID = Production.Product.ProductID

WHERE     (Production.Product.Name =N’BB Ball Bearing’)

 

–Câu hỏi 9:

–Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

— Hãy liệt kê các vị trí đã từng có trong quy trình sản xuất sản phẩm “LL Fork”.

 

SELECT DISTINCT TOP (100)PERCENT Production.Location.Name, Production.WorkOrderRouting.OperationSequence AS Expr1

FROM         Production.WorkOrderRouting INNER JOIN

Production.Product ON Production.WorkOrderRouting.ProductID = Production.Product.ProductID INNER JOIN

Production.Location ON Production.WorkOrderRouting.LocationID = Production.Location.LocationID

WHERE     (Production.Product.Name =N’LL Fork’)

–Câu 10 liệt kê các thông tin cơ bản và Model của các sản phẩm cho nữ

–liệt kê các ProductID dành cho nữ

— điều kiện Production.Product.Style = ‘W’ là dành cho nữ, =’M’ là nam , =”u” cả nam và nữ

 

————————————————————————-

use AdventureWorks

select Production.ProductModel.ProductModelID ,

Production.ProductModel.Name as tenModel,

Production.Product.Class ,

Production.Product.Color ,

Production.Product.ListPrice ,

Production.Product.ProductID,

Production.Product.Name as tenSanPham  ,

Production.Product.ProductLine,

Production.Product.ReorderPoint,

Production.Product.SafetyStockLevel

from Production.ProductModel,

Production.Product

where

Production.Product.ProductModelID = Production.ProductModel.ProductModelID

and Production.Product.Style = ‘W’

–Cau 11 liệt kê tất cả các sản phẩm có tổng lượng tồn kho lớn hơn 1000 ————————————————————————-

–Tính số lượng hàng tồn kho trong bảng Production.ProductInventory

–bằng cách tính tổng trường Quantity gom nhóm theo ProductID

 

use Manufacturing

go

select pp.ProductID, SUM(ppi.Quantity) as ‘Number of Products Inventory’

from Production.Product as pp

inner join Production.ProductInventory as ppi

on pp.ProductID = ppi.ProductID

group by pp.ProductID

having SUM(ppi.Quantity) > 1000

order by pp.ProductID asc

 

–Câu 12 liệt kê thông tin cơ bản và Model của các sản phẩm

— làm giống câu 10 nhưng bỏ điều kiện dành cho nữ đi

select Production.ProductModel.ProductModelID ,

Production.ProductModel.Name as tenModel,

Production.Product.Class ,

Production.Product.Color ,

Production.Product.ListPrice ,

Production.Product.ProductID,

Production.Product.Name as tenSanPham  ,

Production.Product.ProductLine,

Production.Product.ReorderPoint,

Production.Product.SafetyStockLevel

from Production.ProductModel,

Production.Product

where

Production.Product.ProductModelID = Production.ProductModel.ProductModelID

–and Production.Product.Style = ‘W’

Câu 1:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Viết trigger khi chèn thêm vào một chi tiết đơn hàng, kiểm tra xem đơn hàng đó đã tồn tại trong bảng PurchaseOrderHeader hay chưa. Nếu chưa tồn tại: không cho phép thêm đơn hàng đó vào và đưa ra thông báo lỗi. Nếu tồn tại, mới thêm chi tiết đơn hàng, tự động cập nhật trường LineTotal = OrderQty * UnitPrice và StockedQty = ReceiveQty – RejectedQty. Cập nhật lại giá trị trường SubTotal của bảng PurchaseOrderHeader bằng tổng các LineTotal ở chi tiết hoá đơn.

 

Câu 2:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Viết trigger thực hiện: trước khi xoá một đơn hàng trong bảng PurchaseOrderHeader thì xoá toàn bộ chi tiết đơn hàng, sau đó xoá đơn hàng.

 

Câu 3:

Câu hỏi:

Thực hiện các truy vấn sau:

– Sử dụng đệ quy, liệt kê: mã nhân viên, mã cấp trên, bậc nhân viên của tất cả các nhân viên trong công ty. Bậc của nhân viên trong công ty được quy định như sau: người quản lý cao nhất có bậc là 0, nhân viên dưới quyền trực tiếp của người có bậc n là n+1. (bảng nhân viên là HumanResources.Employee, bảng thông tin về nhân viên là Person.Contact)

 

Câu 4:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Viết Trigger thực hiện: mỗi khi thêm chi tiết đặt hàng vào bảng PurchaseOrderDetail, tự động cập nhật lại giá trị trường tổng tiền hàng, tổng tiền (Totaldue) của đơn đặt hàng đó (gồm cả thuế, cước vận chuyển, tiền hàng).

 

Câu 5:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Tạo một thủ tục tính toàn bộ số tiền hàng bán được (không tính lượng hàng bị trả lại) của các đơn đặt hàng trong khoảng thời gian từ tháng 1 đến tháng 3 năm 2004 của các đại lý.

 

Câu 6:

Câu hỏi:

Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

– Tạo một thủ tục liệt kê các nhân viên bán được trên 4000000 tiền hàng (không tính hàng bị trả lại) trong năm 2004.

 

Câu 7:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Hãy dùng đệ quy liệt kê thông tin (ProductAssemblyID, ComponentID, Name, PerAssemblyQty và Level) về tất cả các chất liệu  để sản xuất sản phẩm “Mountain-400-W Silver, 46” (Có ProductID =983). Level của một chất liệu được quy định như sau: các sản phẩm dùng để sản xuất trực tiếp ra “Mountain-400-W Silver, 46” có level =0, các vật liệu dùng để sản xuất trực tiếp ra sản phẩm có level  bằng n là n+1.

 

Câu 8:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Viết thủ tục liệt kê toàn bộ các sản phẩm và tổng số lượng cần sản xuất, tổng số lượng sản xuất đảm bảo chất lượng đưa vào kho, tổng số lượng bị loại, tỉ lệ tổng số lượng bị loại/tổng số lượng sản xuất được của các sản phẩm trong quý I đầu năm 2002.(Thời gian được tính theo DueDate). Danh sách các sản phẩm cần liệt kê được cho dạng xâu các mã sản phẩm cách nhau bởi dấu phẩy (dạng idsp1, …, idspn. Nếu xâu đầu vào là trống thì liệt kê toàn bộ các sản phẩm.

 

 

Câu 9:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Viết thủ tục liệt kê ra tổng số lượng bị từ chối theo các nguyên nhân của các sản phẩm được sản xuất theo nhu cầu kinh doanh trong tháng 10/2001. Danh sách các sản phẩm cần liệt kê được cho dưới dạng xâu các mã sản phẩm ngăn cách bởi dấu phẩy dạng idsp1, idsp2, …, idspn (mã các sản phẩm không chứa ký tự dấu phẩy).

 

 

Câu 10:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Hãy viết Trigger thực hiện công việc sau: Khi INSERT hoặc UPDATE dữ liệu vào bảng WorkOrder, kiểm tra nếu dữ liệu hợp lệ thì cho phép thực hiện, ngược lại thông báo nguyên nhân không hợp lệ và không cho phép thực hiện. Dữ liệu được coi là hợp lệ nếu ScrappedQty <= OrderQty, hoặc StartDate ≤ EndDate ≤ DueDate và mã sản phẩm tồn tại trong bảng sản phẩm (Product).

 

Câu 11:

Câu hỏi:

Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

– Hãy viết thủ tục liệt kê tổng giá thành sản xuất của từng sản phẩm, theo dự kiến và chi phí thực tế trong khoảng thời gian cho trước.(Thời gian được tính theo ActualEndDate).

 

 

———————-//—————————–//—————————–//—————————-

–Câu 1:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

–Viết trigger khi chèn thêm vào một chi tiết đơn hàng, kiểm tra xem đơn hàng đó đã tồn tại trong

–bảng PurchaseOrderHeader hay chưa.

–Nếu chưa tồn tại: không cho phép thêm đơn hàng đó vào và đưa ra thông báo lỗi.

–Nếu tồn tại, mới thêm chi tiết đơn hàng, tự động cập nhật

–trường LineTotal = OrderQty * UnitPrice và StockedQty = ReceiveQty – RejectedQty.

–Cập nhật lại giá trị trường SubTotal của bảng PurchaseOrderHeader bằng tổng các LineTotal ở chi tiết hoá đơn.

———————-//—————————–//—————————–//—————————-

 

——————————————-Cách 1: cực dài và ung đầu. :D———————————————–

use VendorAndPurchasing

go

create trigger [Purchasing].[trg_PurchaseOrderDetail_Insert]

on Purchasing.PurchaseOrderDetail

instead of insert

as

if not exists(

select * from Purchasing.PurchaseOrderHeader as ppoh

where ppoh.PurchaseOrderID in (select PurchaseOrderID from inserted)

) begin

RAISERROR(‘The PurchaseOrderID is not exist in table Purchasing.PurchaseOrderHeader’,16,1);

end;

else begin

— Khai báo bộ biến sẽ dùng trong câu lệnh insert

declare @PurchaseOrderID as int;

set @PurchaseOrderID = (select PurchaseOrderID from inserted);

declare @PurchaseOrderDetailID as int;

set @PurchaseOrderDetailID = (select PurchaseOrderDetailID from inserted);

declare @DueDate as datetime;

set @DueDate = (select DueDate from inserted);

declare @OrderQty as smallint;

set @OrderQty = (select OrderQty from inserted);

declare @ProductID as int;

set @ProductID = (select ProductID from inserted);

declare @UnitPrice as money;

set @UnitPrice = (select UnitPrice from inserted);

declare @ReceivedQty as decimal(8,2);

set @ReceivedQty = (select ReceivedQty from inserted);

declare @RejectedQty as decimal(8,2);

set @RejectedQty = (select RejectedQty from inserted);

declare @ModifiedDate as datetime;

set @ModifiedDate = (select ModifiedDate from inserted);

declare @LineTotal as money;

set @LineTotal = @OrderQty * @UnitPrice;

declare @StockedQty as decimal(9,2);

set @StockedQty = @ReceivedQty – @RejectedQty;

———————-insert into Purchasing.PurchaseOrderDetail

insert into Purchasing.PurchaseOrderDetail(

PurchaseOrderID, PurchaseOrderDetailID, DueDate,

OrderQty, ProductID, UnitPrice, LineTotal, ReceivedQty,

RejectedQty, StockedQty, ModifiedDate

) values (@PurchaseOrderID, @PurchaseOrderDetailID, @DueDate,

@OrderQty, @ProductID, @UnitPrice, @LineTotal, @ReceivedQty,

@RejectedQty, @StockedQty,@ModifiedDate

)

———————-update in Purchasing.PurchaseOrderHeader

update Purchasing.PurchaseOrderHeader

set SubTotal = (select SUM(ppo.LineTotal)

from Purchasing.PurchaseOrderDetail as ppo

where ppo.PurchaseOrderID in (select PurchaseOrderID from inserted)

group by ppo.PurchaseOrderID

)

where PurchaseOrderID in (select PurchaseOrderID from inserted)

end;

 

————————————-Cách 2: ngắn hơn một tẹo. :D——————————————————

use VendorAndPurchasing

go

create trigger [Purchasing].[trg_PurchaseOrderDetail_Insert]

on Purchasing.PurchaseOrderDetail

instead of insert

as

if not exists(

select * from Purchasing.PurchaseOrderHeader as ppoh

where ppoh.PurchaseOrderID in (select PurchaseOrderID from inserted)

) begin

RAISERROR(‘The PurchaseOrderID is not exist in table Purchasing.PurchaseOrderHeader’,16,1);

end;

else begin

———————-insert into Purchasing.PurchaseOrderDetail

insert into Purchasing.PurchaseOrderDetail

select * from Inserted

———————-update lineTotal———-

update Purchasing.PurchaseOrderDetail

set LineTotal= OrderQty*UnitPrice,StockedQty=ReceivedQty-RejectedQty

where PurchaseOrderDetailID = (select PurchaseOrderDetailID from Inserted)

———————-update in Purchasing.PurchaseOrderHeader

update Purchasing.PurchaseOrderHeader

set SubTotal = (select SUM(ppo.LineTotal)

from Purchasing.PurchaseOrderDetail as ppo

where ppo.PurchaseOrderID in (select PurchaseOrderID from inserted)

group by ppo.PurchaseOrderID

)

where PurchaseOrderID in (select PurchaseOrderID from inserted)

end;

 

—- test zone để kiểm tra xem trigger trên có chạy đúng không

— để test ta xem hóa đơn ID là 1 có

— bây h thử chạy insert sẽ thông báo lỗi tồn tại

— bây h xóa hoa dơn 1 trong orderdetail đi

— và insert lại thì sẽ thấy đc trigger hoạt động

–use VendorAndPurchasing

–select * from Purchasing.PurchaseOrderDetail

–where PurchaseOrderID = 1

–select * from Purchasing.PurchaseOrderHeader

–where PurchaseOrderID = 1213

–use VendorAndPurchasing

–select * from Production.Product where ProductID = 938

–insert into Purchasing.PurchaseOrderDetail

–(                    PurchaseOrderID, PurchaseOrderDetailID, DueDate,

—                      OrderQty, ProductID, UnitPrice, LineTotal, ReceivedQty,

—                      RejectedQty, StockedQty, ModifiedDate

–)

–values(

—                      1, 1, ‘2004-01-05’, 60, 494, 50.7465, 0, 60.00,           0.00, 0, ‘2003-12-29’

–)

 

 

 

 

———————-//—————————–//—————————–//—————————-

–Câu 2:

–Cho cơ sở dữ liệu Vendor And Purchasing. Hãy thực hiện truy vấn sau:

–Viết trigger thực hiện:

–trước khi xoá một đơn hàng trong bảng PurchaseOrderHeader thì xoá toàn bộ chi tiết đơn hàng, sau đó xoá đơn hàng.

———————-//—————————–//—————————–//—————————-

 

use VendorAndPurchasing

go

create trigger [Purchasing].[trg_PurchaseOrderHeader_Delete]

on Purchasing.PurchaseOrderHeader

instead of delete

as

begin

delete from Purchasing.PurchaseOrderDetail

where PurchaseOrderID in (select PurchaseOrderID from deleted);

delete from Purchasing.PurchaseOrderHeader

where PurchaseOrderID in (select PurchaseOrderID from deleted);

end;

 

— test

–select * from Purchasing.PurchaseOrderDetail

–order by PurchaseOrderID

–select * from Purchasing.PurchaseOrderHeader

–order by PurchaseOrderID

 

–insert into Purchasing.PurchaseOrderDetail

–(                    PurchaseOrderID, PurchaseOrderDetailID, DueDate,

—                      OrderQty, ProductID, UnitPrice, LineTotal, ReceivedQty,

—                      RejectedQty, StockedQty, ModifiedDate

–)

–values(

—                      4013, 8846, ‘2004-08-24’, 60, 494, 50.7465, 0, 60.00,           0.00, 0, ‘2003-12-29’

–)

–delete from Purchasing.PurchaseOrderHeader

–where PurchaseOrderID = 2

 

———————-//—————————–//—————————–//—————————-

–Câu 3:

–Thực hiện các truy vấn sau:

–Sử dụng đệ quy, liệt kê: mã nhân viên, mã cấp trên, bậc nhân viên của tất cả các nhân viên trong công ty.

–Bậc của nhân viên trong công ty được quy định như sau: người quản lý cao nhất có bậc là 0, nhân viên dưới

–quyền trực tiếp của người có bậc n là n+1.

–(bảng nhân viên là HumanResources.Employee, bảng thông tin về nhân viên là Person.Contact)

———————-//—————————–//—————————–//—————————-

 

use VendorAndPurchasing

go

— với with .. as(truy vấn) sẽ tạo ra 1 bảng có dữ liệu từ câu truy vấn

— bảng này sẽ lưu ở tempDB và bị xóa khi truy vấn xong

 

— ở bài này thì mỗi lần câu lệnh select thứ 2 gọi thì nó sẽ gọi đến chính bảng chứa nó và tìm node cha

WITH temp(id, name, employee_title, manager_id, aLevel)

as (

— Bước khởi tạo

select hre.EmployeeID, pc.FirstName + pc.LastName, hre.Title, hre.ManagerID, 0 as EmployeeLevel

from HumanResources.Employee as hre

inner join Person.Contact as pc

on hre.ContactID = pc.ContactID

where hre.ManagerID is null

Union All — Nối với bàng khác

— Bắt đầu bước đệ quy (Recursive)

Select hre.EmployeeID, pc.FirstName + pc.LastName, hre.Title, hre.ManagerID, a.aLevel + 1 as EmployeeLevel

From temp as a,

HumanResources.Employee as hre

inner join Person.Contact as pc

on hre.ContactID = pc.ContactID

Where a.id = hre.ManagerID

)

Select *

From temp

order by aLevel

 

———————-//—————————–//—————————–//—————————-

–Câu 4:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

–Viết Trigger thực hiện: mỗi khi thêm chi tiết đặt hàng vào bảng PurchaseOrderDetail, tự động cập nhật

–lại giá trị trường tổng tiền hàng, tổng tiền (Totaldue) của đơn đặt hàng đó (gồm cả thuế, cước vận

–chuyển, tiền hàng).

———————-//—————————–//—————————–//—————————-

 

use VendorAndPurchasing

go

create trigger [Purchasing].[trg_PurchaseOrderHeader_Insert]

on Purchasing.PurchaseOrderHeader

after insert

as

begin

— update for Purchasing.PurchaseOrderHeader in SubTotal and TotalDue

— SubTotal = SUM(PurchaseOrderDetail.LineTotal)

— TotalDue = Freight + SubTotal + TaxAmt

declare @SubTotal as money;

declare @TotalDue as money;

set @SubTotal =         (           select SUM(pod.LineTotal)

from PurchaseOrderDetail as pod

where pod.PurchaseOrderID in

(select PurchaseOrderID from inserted)

group by pod.PurchaseOrderID

)

update Purchasing.PurchaseOrderHeader

set

SubTotal = @SubTotal

,TotalDue = @SubTotal + TaxAmt + Freight

where PurchaseOrderID in (select PurchaseOrderID from inserted);

end;

 

—- test

—-disable trigger trg_PurchaseOrderHeader_Insert

—-on Purchasing.PurchaseOrderHeader

 

–select * from Purchasing.PurchaseOrderHeader

–order by PurchaseOrderID asc

 

–select * from Purchasing.PurchaseOrderDetail

–order by PurchaseOrderID

 

–insert into Purchasing.PurchaseOrderDetail

–(                    PurchaseOrderID, PurchaseOrderDetailID, DueDate,

—                      OrderQty, ProductID, UnitPrice, LineTotal, ReceivedQty,

—                      RejectedQty, StockedQty, ModifiedDate

–)

–values(

—                      4012, 8847, ‘2004-08-24’, 60, 494, 50.7465, 0, 60.00,           0.00, 0, ‘2003-12-29’

–)

 

–select * from Purchasing.PurchaseOrderDetail

–order by PurchaseOrderID

 

–select * from Purchasing.PurchaseOrderHeader

–order by PurchaseOrderID asc

 

—-enable trigger trg_PurchaseOrderHeader_Insert

—-on Purchasing.PurchaseOrderHeader

 

 

 

 

 

———————-//—————————–//—————————–//—————————-

–Câu 5:

–Cho cơ sở dữ liệu: Vendor And Purchasing. Hãy thực hiện các truy vấn sau:

–Tạo một thủ tục tính toàn bộ số tiền hàng bán được (không tính lượng hàng bị trả lại)

–của các đơn đặt hàng trong khoảng thời gian từ tháng 1 đến tháng 3 năm 2004 của các đại lý.

———————-//—————————–//—————————–//—————————-

 

use VendorAndPurchasing

go

create function getTotalMoneyFromJanToMar2004()

returns money

begin

declare @totalDue as money;

set @totalDue = (select SUM((ppod.ReceivedQty – ppod.RejectedQty) * UnitPrice) as ‘Total Money’

from Purchasing.PurchaseOrderHeader as ppoh

inner join Purchasing.PurchaseOrderDetail as ppod

on ppoh.PurchaseOrderID = ppod.PurchaseOrderID

where

MONTH(ppoh.OrderDate) <= 3

and MONTH(ppoh.OrderDate) >= 1

and YEAR(ppoh.OrderDate) = 2004

);

return @totalDue;

end;

— print dbo.getTotalMoneyFromJanToMar2004()

 

 

 

 

 

 

 

———————-//—————————–//—————————–//——————————

–Câu 6:

–Cho cơ sở dữ liệu Vendor And Purchasing. Hãy thực hiện các vấn sau:

–Tạo một thủ tục liệt kê các nhân viên bán được trên 4000000 tiền hàng (không tính hàng bị trả lại) trong năm 2004.

———————-//—————————–//—————————–//——————————

 

use VendorAndPurchasing

go

create proc proc_ListGoodEmployeeIn2004

as

begin

—          select ppoh.EmployeeID, SUM((ppod.ReceivedQty – ppod.RejectedQty) * UnitPrice) as ‘Total Money’

—          from Purchasing.PurchaseOrderHeader as ppoh

—          inner join Purchasing.PurchaseOrderDetail as ppod

—          on ppoh.PurchaseOrderID = ppod.PurchaseOrderID

—          where YEAR(ppoh.OrderDate) = 2004

—          group by ppoh.EmployeeID

—          having SUM((ppod.ReceivedQty – ppod.RejectedQty) * UnitPrice) > 4000000.0;

select ppoh.EmployeeID,Person.Contact.FirstName, SUM((ppod.ReceivedQty – ppod.RejectedQty) * UnitPrice) as ‘Total Money’

from HumanResources.Employee INNER JOIN

Person.Contact ON HumanResources.Employee.ContactID = Person.Contact.ContactID INNER JOIN

Purchasing.PurchaseOrderHeader as ppoh ON HumanResources.Employee.EmployeeID = ppoh.EmployeeID INNER JOIN

Purchasing.PurchaseOrderDetail as ppod ON ppoh.PurchaseOrderID = ppod.PurchaseOrderID AND

ppoh.PurchaseOrderID = ppod.PurchaseOrderID

where YEAR(ppoh.OrderDate) = 2004

group by ppoh.EmployeeID,Person.Contact.FirstName

having SUM((ppod.ReceivedQty – ppod.RejectedQty) * UnitPrice) > 4000000.0;

end;

 

— test

— proc_ListGoodEmployeeIn2004

 

 

 

 

 

 

 

———————-//—————————–//—————————–//—————————-

–Câu 7:

–Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

–Hãy dùng đệ quy liệt kê thông tin (ProductAssemblyID, ComponentID, Name, PerAssemblyQty và Level)

–về tất cả các chất liệu  để sản xuất sản phẩm “Mountain-400-W Silver, 46” (Có ProductID =983).

–Level của một chất liệu được quy định như sau: các sản phẩm dùng để sản xuất trực tiếp ra

–“Mountain-400-W Silver, 46” có level =0, các vật liệu dùng để sản xuất trực tiếp ra sản phẩm

–có level  bằng n là n+1.

———————-//—————————–//—————————–//—————————-

use Manufacturing

go

 

WITH temp(ProductAssemblyID, ComponentID, Name, PerAssemblyQty, Levels)

as(

select   pbm.ProductAssemblyID

, pbm.ComponentID

, (select Name from Production.Product where ProductID = pbm.ComponentID)

, pbm.PerAssemblyQty

, 0 as Levels

from Production.BillOfMaterials as pbm

inner join Production.Product as pp

on pbm.ProductAssemblyID = pp.ProductID

where pp.ProductID = 983

UNION ALL

select   pbm.ProductAssemblyID

, pbm.ComponentID

, (select Name from Production.Product where ProductID = pbm.ComponentID)

, pbm.PerAssemblyQty

, t.Levels + 1 as Levels

from    temp as t,

Production.BillOfMaterials as pbm

inner join Production.Product as pp

on pbm.ProductAssemblyID = pp.ProductID

where  t.ComponentID = pbm.ProductAssemblyID

)

Select *

From temp

order by Levels

 

 

 

 

 

 

———————-//—————————–//—————————–//—————————-

–Câu 8:

–Cho cơ sở dữ liệu Manufacturing. Hãy thực hiện truy vấn sau:

— Viết thủ tục liệt kê:

–toàn bộ các sản phẩm và tổng số lượng cần sản xuất (dựa trên trường OrderQty, bảng WorkOrder)

–tổng số lượng sản xuất đảm bảo chất lượng đưa vào kho, (dựa trên trường StockedQty, bảng WorkOrder)

–tổng số lượng bị loại, (dựa trên trường ScrappedQty, bảng WorkOrder)

–tỉ lệ tổng số lượng bị loại/tổng số lượng sản xuất được

–của các sản phẩm trong quý I đầu năm 2002.(Thời gian được tính theo DueDate).

–Danh sách các sản phẩm cần liệt kê được cho dạng xâu các mã sản phẩm cách nhau bởi dấu phẩy dạng idsp1, …, idspn.

–Nếu xâu đầu vào là trống thì liệt kê toàn bộ các sản phẩm.

———————-//—————————–//—————————–//—————————-

 

Create procedure Cau8

@productIDList varchar(1000)

AS

–Neu danh sach san pham là trong –> liet ke toan bo san pham

if @productIDList = ”

Select productID,

sum(OrderQty) as TongSo,

sum(stockedQty) as DamBaoChatLuong,

sum(ScrappedQty) as Biloai,

cast(sum(ScrappedQty)as float)/ (sum(stockedQty) + sum(ScrappedQty)) as [biloai/tongso]

from Production.WorkOrder

where year(duedate) = 2002 and month(duedate) >= 1 and month(duedate) <= 3

group by ProductID

order by ProductID

–Nguoc lai –> liet ke cac san pham co trong danh sach

else

Select productID,

sum(OrderQty) as TongSo,

sum(stockedQty) as DamBaoChatLuong,

sum(ScrappedQty) as Biloai,

cast(sum(ScrappedQty)as float)/ (sum(stockedQty) + sum(ScrappedQty)) as [biloai/tongso]

from Production.WorkOrder

where @productIDList like ‘%’ + convert(varchar(10),productID)+ ‘%’ and year(duedate) = 2002 and month(duedate) >= 1 and month(duedate) <= 3

group by ProductID

order by ProductID

 

 

———demo——————

exec cau8 @productIDList = ”

exec cau8 @productIDList = ‘3’

exec cau8 @productIDList = ‘3,316,324’

 

 

 

 

 

 

 

 

———————-//—————————–//—————————–//—————————-//—————————-

–Câu 9

–Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện truy vấn sau:

— Viết thủ tục liệt kê ra tổng số lượng bị từ chối theo các nguyên nhân của các sản phẩm được sản xuất theo nhu cầu kinh doanh trong tháng 10/2001.

–Danh sách các sản phẩm cần liệt kê được cho dưới dạng xâu các mã sản phẩm ngăn cách bởi dấu phẩy dạng idsp1, idsp2, …, idspn

–(mã các sản phẩm không chứa ký tự dấu phẩy).

 

— Thực hiện truy vấn trên hai bảng: Production.WorkOrder và Production.ScrapReason

———————-//—————————–//—————————–//—————————-//—————————-

 

create procedure Cau9

@productIDList varchar(1000)

AS

–Neu danh sach san pham là trong –> liet ke toan bo san pham

if @productIDList = ”

Select

Production.WorkOrder.productID,

Production.ScrapReason.Name as liDoBiLoai,

sum(ScrappedQty) as SoBiloai

from Production.WorkOrder join Production.ScrapReason on Production.WorkOrder.ScrapReasonID = Production.ScrapReason.ScrapReasonID

where year(duedate) = 2001 and month(duedate) = 10

group by Production.ScrapReason.Name, Production.WorkOrder.productID

order by Production.WorkOrder.productID

–Nguoc lai –> liet ke cac san pham co trong danh sach

else

Select

Production.WorkOrder.productID,

Production.ScrapReason.Name as liDoBiLoai,

sum(ScrappedQty) as SoBiloai

from Production.WorkOrder join Production.ScrapReason on Production.WorkOrder.ScrapReasonID = Production.ScrapReason.ScrapReasonID

where @productIDList like ‘%’ + convert(varchar(10),productID)+ ‘%’ and year(duedate) = 2001 and month(duedate) = 10

group by Production.ScrapReason.Name, Production.WorkOrder.productID

order by Production.WorkOrder.productID

 

 

—————–demo—————

exec cau9 @productIdList = ”

exec cau9 @productIdList = ‘3’

exec cau9 @productIdList = ‘3,328,516’

exec cau9 @productIdList = ‘3,4,5’

 

 

 

 

 

 

 

 

 

———————-//—————————–//—————————–//—————————-

–Câu 10:

–Cho cơ sở dữ liệu: Manufacturing. Hãy thực hiện các truy vấn sau:

–Hãy viết Trigger thực hiện công việc sau: Khi INSERT hoặc UPDATE dữ liệu vào bảng WorkOrder,

–kiểm tra nếu dữ liệu hợp lệ thì cho phép thực hiện, ngược lại thông báo nguyên nhân không hợp lệ và không cho phép thực hiện.

–Dữ liệu được coi là hợp lệ nếu ScrappedQty <= OrderQty,

–hoặc StartDate ≤ EndDate ≤ DueDate và mã sản phẩm tồn tại trong bảng sản phẩm (Product).

———————-//—————————–//—————————–//—————————-

 

 

use Manufacturing

GO

alter trigger [Production].[tgr_WorkOrder_InserAndUpdate]

on Production.WorkOrder

instead of insert, update

as

begin

declare @isUpdate as bigint;

set @isUpdate = 0;

set @isUpdate = (select COUNT(*) from deleted);

declare @condition as tinyint;

set @condition = 0;

declare @WorkOrderID as int;

set @WorkOrderID = (select WorkOrderID from inserted);

declare @ProductID as int;

set @ProductID = (select ProductID from inserted);

declare @OrderQty as int;

set @OrderQty = (select OrderQty from inserted);

declare @StockedQty as int;

set @StockedQty = (select StockedQty from inserted);

declare @ScrappedQty as smallint;

set @ScrappedQty = (select ScrappedQty from inserted);

declare @StartDate as datetime;

set @StartDate = (select StartDate from inserted);

declare @EndDate as datetime;

set @EndDate = (select EndDate from inserted);

declare @DueDate as datetime;

set @DueDate = (select DueDate from inserted);

declare @ScrapReasonID as smallint;

set @ScrapReasonID = (select ScrapReasonID from inserted);

declare @ModifiedDate as datetime;

set @ModifiedDate = (select ModifiedDate from inserted);

— check conditions

if (@ScrappedQty > @OrderQty)

begin

set @condition = 1;

end;

else if (@StartDate > @EndDate or @EndDate > @DueDate)

begin

set @condition = 2;

end;

if not exists(    select * from Production.Product as pp

where pp.ProductID in (select ProductID from inserted)

)

begin

set @condition = 3;

end;

— if all conditions are satisfied

if (@condition = 0)

begin

— insert or update normally

— if “deleted table” is empty, so we INSERT

if (@isUpdate = 0)

insert into Production.WorkOrder

select * from Inserted

— otherwise, we UPDATE

else

update Production.WorkOrder

set

[WorkOrderID] = @WorkOrderID

,[ProductID] = @ProductID

,[OrderQty] = @OrderQty

,[StockedQty] = @StockedQty

,[ScrappedQty] = @ScrappedQty

,[StartDate] = @StartDate

,[EndDate] = @EndDate

,[DueDate] = @DueDate

,[ScrapReasonID] = @ScrapReasonID

,[ModifiedDate] = @ModifiedDate

where

[WorkOrderID] = @WorkOrderID

end;

else  — if there are something wrong

begin

if (@condition = 1)

RAISERROR(‘ScrappedQty > OrderQty’,16,1);

else if (@condition = 2)

RAISERROR(‘StartDate > EndDate or EndDate > DueDate’,16,1);

else if (@condition = 3)

RAISERROR(‘ProductID is not exists in Production.Product’,16,1);

end;

end;

 

—- test

–select * from Production.WorkOrder

–select * from Production.Product

 

–insert into Production.WorkOrder

—                                  (

—                                              [WorkOrderID]

—                                     ,[ProductID]

—                                     ,[OrderQty]

—                                     ,[StockedQty]

—                                     ,[ScrappedQty]

—                                     ,[StartDate]

—                                     ,[EndDate]

—                                     ,[DueDate]

—                                     ,[ScrapReasonID]

—                                     ,[ModifiedDate]

—                                  ) values (

—                                              72592

—                                     ,535

—                                     ,22

—                                     ,28

—                                     ,10

—                                     ,’2004-07-03′

—                                     ,’2004-07-05′

—                                     ,’2004-07-07′

—                                     ,NULL

—                                     ,’2004-07-06′

—                                  );

–update Production.WorkOrder

–set ScrappedQty = 14

–where WorkOrderID = 72592;

 

 

 

 

 

 

 

 

 

 

—————————-//—————————-//—————————-//—————————-

–Câu 11

–Cho cơ sở dữ liệu Manufacturing. Hãy thực hiện truy vấn sau:

— Hãy viết thủ tục liệt kê tổng giá thành sản xuất của từng sản phẩm theo dự kiến

— và chi phí thực tế trong khoảng thời gian cho trước.(Thời gian được tính theo ActualEndDate).

 

–Thực hiện truy vấn trên bảng WorkOrderRouting

–tham số: startDate chỉ ngày bắt đầu của khoảng thời gian mà người dùng muốn thống kê

–tham số: endDate chỉ ngày kết thúc của khoảng thời gian mà người dùng muốn thống kê

—————————-//—————————-//—————————-//—————————-

 

Create procedure cau11

@startDate datetime,

@endDate datetime

As

Select ProductID,

sum(PlannedCost) as TongGiaDuKien,

sum(ActualCost) as tongGiaThucTe

From Production.WorkOrderRouting

where ActualEndDate between @startDate and @endDate

group by ProductID

Order by ProductID

 

———-demo———

exec cau11 @startDate = ‘1/1/2001′, @endDate = ’10/10/2001’

Câu 1

Trình bày các cú pháp lệnh để phân phần quyền cho login (phân quyền cho người sử dụng mức Server)

 

Câu 2

Trình bày các cú pháp lệnh để phân quyền mức Database

 

Câu 3

Ý nghĩa của lược đồ, phân quyền mức lược đồ (Schema)

 

Câu 4

Phân quyền cho user mức đối tượng cơ sở dữ liệu (database objects)

 

Câu 6

Phân biệt giữa hai lệnh Revoke – đòi lại các quyền thực thi các thao tác đã cấp pháp và Deny – cấm thực thi các thao tác, cho ví dụ.

 

Câu 5

Trình bày nguyên nhân dẫn đến mất liên kết giữa  server login và database user trong khi triển khai cơ sở dữ liệu lên một server mới và cách khắc phục, cho ví dụ.

Câu 7

Trình bày về các giá trị của tham số Execute As trong thủ tục, hàm, trigger; cho ví dụ.

Câu 8

Trình bày về ý nghĩa của các tham số FILLFACTOR và PAD_INDEX trong khi tạo chỉ mục.

Câu 9

Trình bày các bước tạo bảng phân hoạch (partitioned table), ý nghĩa của bảng phân hoạch và cho ví dụ.

Câu 10

Trình bày về fulltext search trong MS SQL Server, cho ví dụ.

 

 

Câu 1

Trình bày các cú pháp lệnh để phân phần quyền cho login (phân quyền cho người sử dụng mức Server)

Trả lời

GRANT permission [ ,…n ]

TO <grantee_principal> [ ,…n ] [ WITH GRANT OPTION ]

[ AS <grantor_principal> ]

 

Permission: danh sách các quyền gồm có: BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, and CREATE VIEW

<grantee_principal> : danh sách các login được chọn phân quyền

WITH GRANT OPTION: cho phép các login grantee chuyển giao quyền của mình cho những login khác

<grantor_principal> : danh sách các login được chọn phân quyền do các login trên grantee cấp cho

Ví du:

Trong cơ sở dữ liệu đã có các login sau: mta01 và mta02.

– Ta cấp quyền cho mta01 có quyền được tạo database mới:

GRANT CREATE DATABASE

TO mta01

Do đó login mta01 có quyền được tạo 1 database mới và mta02 được cấp phát quyền gì cho nên nó không thể thực hiện được thao tác được tác vụ nào.

(mta01 có password: ‘123456d’ và mta02 có pasword : ‘123456’)

Chặn quyền:

DENY permission [ ,…n ]

TO <grantee_principal> [ ,…n ] [ WITH GRANT OPTION ]

[ AS <grantor_principal> ]

 

Thu hồi quyền:

REVOKE permission [ ,…n ]

TO <grantee_principal> [ ,…n ] [ WITH GRANT OPTION ]

[ AS <grantor_principal> ]

 

Các bước tạo 1 login:

1.

 

2.

 

3.

 

4. Ấn OK

 

Tương tự tạo được login mta02

 

Ở bước 3: bắt buộc phải tích chọn CDSL master

Chọn CSDL QLBanhang để phục vụ câu 2

 

 

Câu 2

Trình bày các cú pháp lệnh để phân quyền mức Database

Trả lời:

Cú pháp cấp phát quyền

GRANT { ALL [ PRIVILEGES ] }

| permission [ ( column [ ,…n ] ) ] [ ,…n ]

[ ON [ class :: ] securable ] TO principal [ ,…n ]

      [ WITH GRANT OPTION ] [ AS principal ]

Chú thích:

ALL:Cấp phát tất cả các quyền cho người dùng trên  đối tượng cơ sở dữ liệu được chỉ định. Các quyền có thể cấp phát cho người dùng bao gồm:

– Đối với hàm vô hướng: EXECUTE và REFERENCES

– Đối với thủ tục: DELETE, EXECUTE, INSERT, SELECT và UPDATE.

– Đối với bảng, views: DELETE, INSERT, REFERENCES, SELECT và UPDATE.

Permission: liệt kê tên của quyền được cấp phát.

column: xác định rõ tên của các cột trong bảng mà những quyền được liệt kê trên được cấp phát, bắt buộc chúng phải được để trong dấu ().

class::xác định các lớp trên đó được cấp quyền.

securable:xác định đối tượng dữ liệu mà trên đó được cấp quyền (bảng, views, hàm, thủ tục)

principal: danh sách người dùng, nhóm người dùng

Grant Option:Cho phép người dùng chuyển tiếp quyền cho người dùng khác.

Ví dụ:

– Cấp phát cho người dùng tên là mta01quyền thực thi các câu lệnh SELECT, INSERT,

UPDATE trên bảng MATHANG:

GRANT SELECT,INSERT,UPDATE

ON MATHANG

TO mta01

– Cấp cho người dùng  mta02 quyền xem Tên hàng, Soluong, Giaban của bảng MATHANG:

GRANT SELECT (Tenhang,Soluong,Giaban) ON MATHANG

To mta02

Hoặc  có thể được viết như sau:

Grant SELECT

ON MATHANG(Tenhang, Soluong, Giaban)

To mta02

– Cấp phát toàn bộ quyền trên bảng DONDATHANG:

GRANT ALL

ON MATHANG

To mta01

– Cấp cho mta01quyền được xem dữ liệu trên bảng CHITIETHOADON và đồng thời có thể được chuyển quyền này cho người khác:

GRANT SELECT

ON CHITIETHOADON

To mta01

WITH GRANT OPTION

– Cấp quyền tạo bảng, views:

GRANT CREATE TABLE, CREATE VIEW

To mta02

Cú pháp ngăn chặn quyền:

DENY { ALL [ PRIVILEGES ] }

| permission [ ( column [ ,…n ] ) ] [ ,…n ]

[ ON [ class :: ] securable ] TO principal [ ,…n ]

[ CASCADE] [ AS principal ]

Cú pháp thu hồi quyền:

REVOKE [ GRANT OPTION FOR ]

{

[ ALL [ PRIVILEGES ] ]

|

permission [ ( column [ ,…n ] ) ] [ ,…n ]

}

[ ON [ class :: ] securable ]

{ TO | FROM } principal [ ,…n ]

[ CASCADE] [ AS principal ]

Chú thích: (gần tương tự GRANT)

CASCADE: Chỉ định ngăn cản (đối với DENY) hoặc thu hồi (đối với REVOKE) theo dây chuyền đối với các người dùng được cấp quyền với từ khóa WITH GRANT OPTION

 

Câu 3

Ý nghĩa của lược đồ, phân quyền mức lược đồ (Schema)

Lời giải:

– Ý nghĩa: Trong SQL 2005 sử dụng lược đồ để gom nhóm các đối tượng phục vụ cho việc dễ dàng quản lý các CSDL lớn.

Người dùng trong SQL 2005 được gán một giản đồ mặc định.

Có thể cấp quyền hoặc cấm quyền truy cập đến lược đồ cho user hoặc group.

Cấu trúc lệnh

CREATE SCHEMA schema_name_clause [ <schema_element> [ , …n ] ]

<schema_name_clause> ::=

{ schema_name

| AUTHORIZATION owner_name

| schema_name AUTHORIZATION owner_name

}

<schema_element> ::=

{ table_definition | view_definition | grant_statement

revoke_statement | deny_statement

}

– Phân quyền mức lược đồ:

+ Cấp quyền:

GRANT permission  [ ,…n ] ON SCHEMA :: schema_name

TO database_principal [ ,…n ]

[ WITH GRANT OPTION ]

[ AS granting_principal ]

Ví dụ: Cấp quyền truy vấn cho schema HR

GRANT SELECT ON SCHEMA::HR TO Jshah

+ Lấy lại quyền:

REVOKE permission  [ ,…n ] ON SCHEMA :: schema_name

TO database_principal [ ,…n ]

[ WITH GRANT OPTION ]

[ AS granting_principal ]

Ví dụ:

REVOKE SELECT ON SCHEMA::HR TO Jshah

+ Loại bỏ quyền:

DENY permission  [ ,…n ] ON SCHEMA :: schema_name

TO database_principal [ ,…n ]

[ WITH GRANT OPTION ]

[ AS granting_principal ]

Ví dụ:

DENY SELECT ON SCHEMA::HR TO Jshah

 

 

Câu 4

Phân quyền cho user mức đối tượng cơ sở dữ liệu (database objects)

Lời giải:

Các đối tượng trong cơ sở dữ liệu bao gồm table ,view,store procedure, …. Ta có thể cấp phát quyền, đòi lại quyền, cấm quyền cho đối tượng bất kỳ
–  Cấp phát quyền trên đối tượng(GRANT)

GRANT <permission> [ ,…n ] ON

[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,…n ] ) ]

TO <database_principal> [ ,…n ]

[ WITH GRANT OPTION ]

Ví dụ: Cấp phát quyền thực thi (Execute) cho đối tượng procedure ap_aTable_Insert cho tất cả (public)

Grant Execute On dbo.ap_aTable_Insert To Public

– Đòi lại quyền cho đối tượng (REVOKE)

REVOKE [ GRANT OPTION FOR ] <permission> [ ,…n ] ON

[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,…n ] ) ]

{ FROM | TO } <database_principal> [ ,…n ]

[ CASCADE ]

Ví dụ: Đòi lại quyền thực thi (Execute) cho đối tượng procedure ap_aTable_Insert cho tất cả (public)

Revoke Execute On dbo.ap_aTable_Insert To Public

– Loại bỏ quyền cho đối tượng(DENY)

DENY <permission> [ ,…n ] ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,…n ] ) ] TO <database_principal> [ ,…n ] [ CASCADE ]

Ví dụ: không cho quyền thực thi (Execute) cho đối tượng procedure ap_aTable_Insert với tất cả (public)

Deny Execute On dbo.ap_aTable_Insert To Public

 

Câu 5

Trình bày nguyên nhân dẫn đến mất liên kết giữa  server login và database user trong khi triển khai cơ sở dữ liệu lên một server mới và cách khắc phục, cho ví dụ.

Khi triển khai CSDL như trên sẽ không đảm bảo được liên kết giữa server logins and database users. Vì:

  • Server logins được lưu trữ trong CSDL Master, Database users được lưu trữ trong từng CSDL.
  • Các Database users sẽ được attach theo CSDL, nhưng các Database users này lại liên kết đến server logins trên server cũ. => Lỗi.

 

  • Giải pháp:
    • Sử dụng sp_change_users_login

Cú pháp: sp_change_users_login [ @Action = ] ‘action’

[ , [ @UserNamePattern = ] ‘user’ ]

[ , [ @LoginName = ] ‘login’ ]   [ , [ @Password = ] ‘password’ ]

 

Action Value Description
Auto_Fix Links a user entry in the sysusers table in the current database to a SQL Server login of the same name. If a login with the same name does not exist, one will be created.

Nếu login không tồn tại thì bạn phải chỉ định cả user and password.

Nếu login đã có thì phải chỉ định user và không được chỉ định password.

login phải là NULL, user phải đúng là có trong CSDL, login phải chưa được mapped đến một user nào khác.

Report Liệt kê danh sách các user trong CSDL hiện thời không có liên kết đến server logins. Khi đó các tham số: user, login, and password must be NULL or not specified.
Update_One Liên kết user đến một server login. Khi đó: user and login must be specified. password must be NULL or not specified.

 

  • Hiển thị tất cả các user không có liên kết đến server logins của CSDL hiện thời:

exec sp_change_users_login @Action = ‘Report’

  • Liên kết user chỉ định trong @UserNamePattern đến một server login:

exec sp_change_users_login @Action = ‘Update_one’,

@UserNamePattern = ‘test’,

@LoginName = ‘hung‘

–login chưa có phải chỉ định cả user and password.

exec sp_change_users_login @Action = ‘Auto_Fix’,

@UserNamePattern = ‘nsunderic’ ,

@password = ‘myl.password’

 

 

 

Câu 6

Phân biệt giữa hai lệnh Revoke – đòi lại các quyền thực thi các thao tác đã cấp pháp và Deny – cấm thực thi các thao tác, cho ví dụ.

Lời giải:

–         Phân biệt giữa hai lệnh Revoke (đòi lại quyền thực thi thao tác đã cấp pháp)

Câu lệnh REVOKE được sử dụng để thu hồi quyền đã được cấp phát cho người dùng. Tương ứng với câu lệnh GRANT, câu lệnh REVOKE được sử dụng trong hai trường hợp:

• Thu hồi quyền đã cấp phát cho người dùng trên các đối tượng cơ sở dữ liệu.

• Thu hồi quyền thực thi các câu lệnh trên cơ sở dữ liệu đã cấp phát cho người dùng.

1)                  Thu hồi quyền trên đối tượng cơ sở dữ liệu

Cú pháp câu lệnh REVOKE sử dụng để thu hồi quyền đã cấp phát trên đối tượng cơ sở dữ liệu có cú pháp như sau:

 

REVOKE [ GRANT OPTION FOR ]

{

[ ALL [ PRIVILEGES ] ]

|

permission [ ( column [ ,…n ] ) ] [ ,…n ]

}

[ ON [ class :: ] securable ]

{ TO | FROM } principal [ ,…n ]

[ CASCADE] [ AS principal ]

 

 

REVOKE [GRANT OPTION FOR]

ALL [PRIVILEGES]| các_quyền_cần_thu_hồi

[(danh_sách_cột)] ON tên_bảng | tên_khung_nhìn

|ON tên_bảng | tên_khung_nhìn [(danh_sách_cột)]

|ON tên_thủ_tục

|ON tên_hàm

FROM danh_sách_người_dùng

[CASCADE]

Câu lệnh REVOKE có thể sử dụng để thu hồi một số quyền đã cấp phát cho người dùng hoặc là thu hồi tất cả các quyền (ALL PRIVILEGES).

Ví dụ :  ta có csdl QLSinhvien

  1. Thu hồi quyền thực thi lệnh Insert trên bảng Sinhvien (HoTen, NgaySinh, DiaChi)

Revoke insert

  • on Sinhvien

from QLSinhvien

  1. Thu hồi quyền của người dùng trên 1 trường của 1 bảng dữ liệu

Giả sử người dùng được cấp quyền xem trên bảng Sinhvien. bây giờ ta thu hồi quyền xem trường ngaysinh trên bảng lớp đi. Câu lệnh như sau :

Revoke select

  • on Sinhvien(ngaysinh)

from QLSinhvien

Khi ta sử dụng câu lệnh REVOKE để thu hồi quyền trên một đối tượng cơ sở dữ liêu từ một người dùng náo đó, chỉ những quyền mà ta đã cấp phát trước đó mới được thu hồi, những quyền mà người dùng này được cho phép bởi những người dùng khác vẫn còn có hiệu lực. Nói cách khác, nếu hai người dùng khác nhau cấp phát cùng các quyền trên cùng một đối tượng cơ sở dữ liệu cho một người dùng khác, sau đó người thu nhất thu hồi lại quyền đã cấp phát thì những quyền mà người dùng thứ hai cấp phát vẫn có hiệu lực.

Ví dụ : giả sử trong csdl QLSinhvien có 3 người dùng là A,B,C đều có quyền sử dụng và cấp phát quyền cho bảng Sinhvien.

–          A thực hiện cấp phát quyền xem cho C trên bảng Sinhvien :

 

use QLSinhvien

grant select on Sinhvien to C

tiếp đến B lại cấp phát quyền xem và thêm dữ liệu cho C trên bảng Sinhvien :

 

use QLSinhvien

grant select,insert on Sinhvien to C

như vậy C có quyền xem và thêm thông tin sinh viên. Bây giờ B thực hiện tước quyền xem và thêm dữ liệu của C trên bảng Sinhvien đi :

 

REVOKE SELECT,INSERT

ON Sinvien

FROM C

Tuy vậy C vẫn có quyền xem thông tin của bang Sinhvien –  đây là quyền do A cấp cho C

Nếu ta đã cấp phát quyền cho người dùng nào đó bằng câu lệnh GRANT với tuỳ chọn WITH GRANT OPTION thì khi thu hồi quyền bằng câu lệnh REVOKE phải chỉ định tuỳ chọn CASCADE. Trong trường hợp này, các quyền được chuyển tiếp cho những người dùng khác cũng đồng thời được thu hồi.

Ví dụ : ta cấp phát quyền cho A trên bảng Sinhvien như sau :

Grant select

on Sinhvien

to A

with grant option

tiếp đến A lại cấp phát quyền xem trên bảng Sinhvien cho B :

Grant select

on Sinhvien

to B

Bây giờ ta thu hồi quyền của A :

REVOKE SELECT

ON Sinvien

FROM A CASCADE

 

Sau khi thực thi lệnh trên thì quyền của B mà A cấp cũng bị mất theo

–          Trong trường hợp cần thu hồi các quyền đã được chuyển tiếp và khả năng chuyển tiếp các quyền đối với những người đã được cấp phát quyền với tuỳ chọn WITH GRANT OPTION, trong câu lệnh REVOKE ta chỉ định mệnh đề GRANT OPTION FOR.

Với ví dụ trên ta chuyển thành

REVOKE grant option for SELECT

ON Sinvien

FROM A CASCADE

Sau khi thực thi câu lệnh trên thì B mất quyền mà A đã cấp đồng thời A không thể chuyển tiếp quyền cho người dùng nào nữa tuy nhiên A vẫn có quyên xem thông tin trên bảng Sinhvien

2)                  Thu hồi quyền thực thi các câu lệnh trên cơ sở dữ liệu

Việc thu hồi quyền thực thi các câu lệnh trên cơ sở dữ liệu (CREATE DATABASE, CREATE TABLE, CREATE VIEW,…) được thực hiện đơn giản với câu lệnh REVOKE có cú pháp:

REVOKE ALL | các_câu_lệnh_cần_thu_hồi

FROM danh_sách_người_dùng

Ví dụ 8: Để không cho phép người dùng QLSinhvien thực hiện lệnh CREATE TABLE trên cơ sở dữ liệu, ta sử dụng câu lệnh:

 

REVOKE CREATE TABLE

FROM QLSinhvien

–          Deny – cấm thực thi các thao tác

Deny là câu lệnh từ chối quyền đối với người dùng, người dùng chỉ được           quyền khi có chỉ định rõ ràng.

Cú pháp :

 

DENY { ALL [ PRIVILEGES ] }

| permission [ ( column [ ,…n ] ) ] [ ,…n ]

[ ON [ class :: ] securable ] TO principal [ ,…n ]

[ CASCADE] [ AS principal ]

 

Ví dụ : từ chối quyền thực hiện lệnh đối với các user : A,B,C

deny create database, create table

to A,B,C

Ví dụ gán quyền khai thác cho role, sau đó thực hiện từ chối thực hiện của các user

trong role:

 

USE QLSinhvien

GO

 

GRANT SELECT

ON Sinhvien

TO public

GO

 

DENY SELECT, INSERT, UPDATE, DELETE

ON Sinhvien

TO A, B, C

 

Ví dụ từ chối quyền của role:

 

DENY CREATE TABLE TO Accounting

 

 


 Câu 7

Trình bày về các giá trị của tham số Execute As trong thủ tục, hàm, trigger; cho ví dụ.

Lời giải:

Functions, Stored Procedures, and DML Triggers

{ EXEC | EXECUTE } AS { CALLER | SELF | OWNER | ‘user_name’ }

 

DDL Triggers with Database Scope

{ EXEC | EXECUTE } AS { CALLER | SELF | ‘user_name’ }

 

DDL Triggers with Server Scope and logon triggers

{ EXEC | EXECUTE } AS { CALLER | SELF | ‘login_name’ }

 

 

Các tham số Execute As trong thủ tục, hàm, trigger

CALLER:  những người đã được cấp quyền thì được gọi đến module này.

SELF: nghĩa là người được sử dụng module này là người tạo ra hoặc sửa đổi module.

OWNER:  người sở hữu module này mới có quyền được dùng module

User_name: chỉ đích danh người được sử dụng module

 

Ví dụ:

 

CREATE PROCEDURE AccessTable

WITH EXECUTE AS CALLER

AS SELECT * FROM dbo.SomeTable;

 

 

 

 

 

ở ví dụ dưới thì mary là người sở hữu của bảng AccessMytable và giờ chỉ có Mary mới có quyền sử dụng thủ tục này

 

CREATE PROCEDURE Mary.AccessMyTable

WITH EXECUTE AS OWNER

AS SELECT * FROM Mary.MyTable;

 

 

Câu 8

Trình bày về ý nghĩa của các tham số FILLFACTOR và PAD_INDEX trong khi tạo chỉ mục.

Lời giải:

Fillfactor là một giá trị từ 1% đến 100%, nó cho biệt độ đầy sql server sẽ tạo mức lá của mỗi trang chỉ số trong quá trình tạo chỉ số

 

Pad_index: chỉ ra rằng không chi mức lá, mà những mức trung gian của trang chỉ số được phủ theo phần trăm FillFactor được xác định bởi vì Pad_index sử dụng phần trăn mà Fillfactor chỉ ra.

 

Câu 9

Trình bày các bước tạo bảng phân hoạch (partitioned table), ý nghĩa của bảng phân hoạch và cho ví dụ.

Lời giải:

Trình bày các bước tạo bảng phân hoạch (partitioned table), ý nghĩa của bảng phân hoạch và cho ví dụ.

 

Bảng phân hoạch là kỹ thuật phân chia bảng thành từng đoạn nhằm quản lý hiệu quả cơ sở dữ liệu với dung lượng lớn. Đối với các ứng dụng truy cập từ bên ngoài, table vẫn là một bảng duy nhất, chỉ có cấu trúc vật lí của nó là khác so với bảng không phân đoạn.

Ưu điểm:

–         Tiện lợi về quản trị: back up/restore 1 đoạn mà ko ảnh hưởng đến các đoạn khác, xây dựng lại index trên từng đoạn thay vì trên toàn bộ bảng.

–         Cải tiến về hiệu năng: hệ thống chỉ cần truy cập vào đoạn dữ liệu cần lấy và bỏ qua các đoạn còn lại (partition elimination). Giảm tranh chấp vào ra giữa các câu lệnh, vd 2 câu lệnh SELECT và UPDATE hoạt động trên cùng một bảng nhưng ở 2 đoạn khác nhau nên có thể thực hiện hoàn toàn song song.

 

VD: ta có database PartTest, bảng BanHang gồm các cột BanHangID, NgayGiaoDich, MaSP, SoLuong, ThanhTien. Chúng ta phân hoạch bảng theo năm của trường NgayGiaoDich: lưu csc giao dịch của năm 2009 trở về trươc vào 1 đoạn, trong năm 2010 vào 1 đoạn và từ 2011 trở đi vào 1 đoạn.

Như vậy bảng có 3 đoạn, ta tạo 3 FileGroup cho 3 đoạn này:

 

ALTER DATABASE PartTest ADD FILEGROUP FG2009AndBefore

ALTER DATABASE PartTest ADD FILEGROUP FG2010

ALTER DATABASE PartTest ADD FILEGROUP FG2011AndAfter

 

Thêm data file vào mỗi File Group

 

ALTER DATABASE PartTest ADD FILE (NAME = N'FY2009AndBefore', FILENAME = N'D:\DATA\PartTest\FY2009AndBefore.ndf') TO FILEGROUP FG2009AndBefore 
ALTER DATABASE PartTest ADD FILE (NAME = N'FY2010', FILENAME = N'D:\DATA\PartTest\FY2010.ndf') TO FILEGROUP FG2010 
ALTER DATABASE PartTest ADD FILE (NAME = N'FY2011AndAfter', FILENAME = N'D:\DATA\PartTest\FY201AndAfter.ndf') TO FILEGROUP FG2011AndAfter

 

Tạo Partition Function và Partittion Scheme

CREATE PARTITION FUNCTION PFunc_NGD(DATETIME) AS RANGE RIGHT FOR VALUES ('2010-01-01', '2011-01-01') 
GO 
CREATE PARTITION SCHEME PScheme_NGD AS PARTITION PFunc_NGD TO (FG2009AndBefore, FG2010, FG2011AndAfter)

 

Partition Function PFunc_NGD() định nghĩa giá trị biên cho các đoạn, ngày đầu tiên của năm 2010 và ngày đầu tiên của 2011. Dải giá trị cua các đoạn sẽ như sau:

–         Đoạn 1: từ trước đến 2009-12-31 23:59:59

–         Đoạn 2: 2010-01-01 00:00:00 đến 2010-12-31 23:59:59

–         Đoạn 3: 2011-01-01 00:00:00 về sau

Partition Scheme PScheme_NGD dung hàm PFunc_NGD để gắn các đoạn vào từng file group. Đoạn 1 vào FG2009AndBefore, đoạn 2 vào FG2010, đoạn 3 vào FG2011AndAfter.

 

Tạo bảng dùng Partition Scheme

 
CREATE TABLE dbo.BanHang(
BangHang_ID INT IDENTITY,
NgayGiaoDich DATETIME,
MaSP INT,
SoLuong INT,
ThanhTien INT
) ON PScheme_NGD(NgayGiaoDich)
GO
CREATE CLUSTERED INDEX CI_BanHang_NGD ON dbo.BanHang(NgayGiaoDich) ON PScheme_NGD(NgayGiaoDich)

 

Mệnh đề ON PScheme_NGD(NgayGiaoDich)  chỉ định bảng BanHang và index CI_BanHang_NGD được tạo trên Partition Scheme PScheme_NGD, có nghĩa là để cho PScheme_NGD quản lý việc phân bổ dữ liệu

 

Câu 10

Trình bày về fulltext search trong MS SQL Server, cho ví dụ.

Lời giải:

Trình bày về fulltext search trong MS SQL Server, cho ví dụ

 

Full Text Search là kỹ thuật tìm kiếm theo chỉ mục (Index), cho phép tìm kiếm nhanh hơn trên những CSDL lớn và kết quả chính xác hơn so với tìm kiếm LIKE. Các kiểu tìm kiếm FTS bao gồm FREETEXT, FREETABLE, CONTAINS, CONTAINSTABLE. Thường dùng nhất là tìm kiếm kiểu FREETEXT và CONTAINS

– FREETEXT là kiểu tìm kiếm mờ (fuzzy). Vd khi tìm kiếm với từ khóa ‘Marketing Assistant’ thì những dữ liệu có chứa Marketing hoặc Assistant hoặc có dạng market, ing Assis…. cũng sẽ đc tìm thấy

– CONTAINS là kiểu tìm kiếm với AND hoặc OR

 

 

Table Partioning cho câu 9 Phần 3.2

 

–Tao filegroup

ALTER DATABASE PartTest ADD FILEGROUP FG2009AndBefore

ALTER DATABASE PartTest ADD FILEGROUP FG2010

ALTER DATABASE PartTest ADD FILEGROUP FG2011AndAfter

 

 

–Thêm data file vào mỗi File Group

ALTER DATABASE PartTest Add file (Name=’FY2009AndBefore’, filename=’C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\FY2009AndBefore.ndf’)

to filegroup FG2009AndBefore

 

ALTER DATABASE PartTest Add file (Name=’FY2010′, filename=’C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\FY2010.ndf’)

to filegroup FG2010

 

ALTER DATABASE PartTest Add file (Name=’FY2011AndAfter’, filename=’C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\FY2011AndAfter.ndf’)

to filegroup FG2011AndAfter

 

 

–Tạo Partition Function và Partittion Scheme

CREATE PARTITION FUNCTION PFunc_NGD(DATETIME) AS RANGE RIGHT FOR VALUES (‘2010-01-01’, ‘2011-01-01’)

GO

CREATE PARTITION SCHEME PScheme_NGD AS PARTITION PFunc_NGD TO (FG2009AndBefore, FG2010, FG2011AndAfter)

 

 

–Tạo bảng dùng Partition Scheme

CREATE TABLE dbo.BanHang(

BangHang_ID INT IDENTITY,

NgayGiaoDich DATETIME,

MaSP INT,

SoLuong INT,

ThanhTien INT

) ON PScheme_NGD(NgayGiaoDich)

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s