Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 21 kết quả

Đề tài: Một số mẹo vặt trong MS SQL

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà nội
    Bài viết
    77

    Mặc định Một số thủ thuật trong MS SQL

    1/tạo cột STT cho bảng
    +)tạo database và table với cấu trúc phía dưới
    SQL Code:
    1. CREATE DATABASE Newdatabase;
    2. CREATE TABLE Newtable (
    3. ma VARCHAR(5) NOT NULL,
    4. ten nvarchar(30) NULL,
    5. tuoi INT NULL
    6. );
    +)nhập DL cho bảng
    SQL Code:
    1. INSERT INTO newtable VALUES ('M01','thanh',2),('M02',N'vợ thanh',1);
    +)tạo cột STT cho bảng Newtable
    SQL Code:
    1. SELECT (SELECT COUNT(*) FROM newtable AS tam WHERE tam.ma<=newtable.ma) AS STT,
    2. newtable.* FROM newtable;
    kết quả
    1 | M01 | thanh | 2
    2 | M02 | vợ thanh | 1
    2/tạo bộ N bản ghi ngẫu nhiên trong table
    +)tạo database và table với cấu trúc
    SQL Code:
    1. CREATE DATABASE Newdatabase;
    2. CREATE TABLE Newtable (
    3. id INT IDENTITY NOT NULL,
    4. ten nvarchar(20) NULL,
    5. tuoi INT NULL
    6. );
    +nhập DL cho newtable
    +tạo bộ N random record với newtable
    SQL Code:
    1. SELECT top N * FROM newtable WHERE [điều kiên] oder BY NewID();
    kết quả: .....

    3/Lấy toàn bộ tên các Fields,Tables,Procedures,Views trong 1 Database,tên các Databases đã được Attach
    +)tạo 1 số bảng
    SQL Code:
    1. CREATE DATABASE database1
    2. GO
    3. USE database1
    4. CREATE TABLE table1(id INT)
    5. CREATE TABLE table2(ten nvarchar(30))
    6. CREATE TABLE table3(tuoi INT)
    +)lọc tên các table tồn tại trong datbase1
    SQL Code:
    1. USE datbase1
    2. SELECT name FROM sysobjects WHERE TYPE='U'
    3. hoặc
    4. SELECT name FROM sys.TABLES

    +)lọc tên các databases đã được attach
    SQL Code:
    1. SELECT name FROM sys.DATABASES

    +)lọc tên các stored procedures có trong database
    SQL Code:
    1. USE database1
    2. SELECT name FROM sys.procedures

    +)lọc tên các views có trong database
    SQL Code:
    1. USE database1
    2. SELECT name FROM sys.views

    +)lọc tên các fields trong table
    SQL Code:
    1. SELECT  fd.name AS Fieldnames
    2. FROM sysobjects tb INNER JOIN
    3. syscolumns fd ON tb.id = fd.id AND tb.TYPE = 'U'
    4. WHERE tb.name='table_name'
    5. //hoặc
    6. SELECT syscolumns.name AS Fieldnames
    7. FROM syscolumns,sysobjects
    8. WHERE syscolumns.id=sysobjects.id
    9. AND sysobjects.name='table_name'

    còn nữa....
    Đã được chỉnh sửa lần cuối bởi thanhlv : 25-11-2007 lúc 08:30 PM.
    Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà nội
    Bài viết
    77

    4/tạo store procedure để insert DL vào 2 bảng có chứa quan hệ
    +)tạo 2 table với cấu trúc phía dưới (quan hệ 1-1)
    SQL Code:
    1. USE mydatabase
    2. GO
    3. CREATE TABLE Sinhvien (
    4. id INT NOT NULL PRIMARY KEY,
    5. Hoten nvarchar(50),
    6. Ngaysinh datetime,
    7. Lopid NCHAR(5)
    8. )
    9. GO
    10. CREATE TABLE ChitietSV (
    11. id INT NOT NULL PRIMARY KEY,
    12. Doituong NCHAR(2),
    13. Tongiao NCHAR(2)
    14. )
    15. GO
    16. ALTER ChitietSV
    17. ADD CONSTRAINT Chitiet$SV
    18. FOREIGN KEY (id) REFERENCES Sinhvien(id)
    +)tạo proc
    SQL Code:
    1. USE mydatabase
    2. GO
    3. CREATE PROCEDURE sp_insertSV (
    4. @SinhvienID INT,
    5. @Hoten nvarchar(50),
    6. @Ngaysinh datetime,
    7. @Lopid NCHAR(5),
    8. @Doituong NCHAR(2),
    9. @Tongiao NCHAR(2)
    10. )
    11. AS
    12.   /*nếu ko tồn tại mã SV = @SinhvienID trong bảng Sinhvien thì mới cho insert */
    13.   IF NOT EXISTS (SELECT * FROM Sinhvien WHERE id=@SinhvienID)
    14.       BEGIN
    15.         /*insert DL vào 2 bảng Sinhvien và ChitietSV */
    16.         INSERT Sinhvien VALUES (@SinhvienID,@Hoten,@Ngaysinh,@Lopid)
    17.         INSERT ChitietSV VALUES (@SinhvienID,@Doituong,@Tongiao)
    18.       END
    19.     /*ngược lại */
    20.     ELSE
    21.       /*nếu chưa tồn tại mã SV = @SinhvienID trong bảng ChitietSV thì mới cho insert vào bảng này */
    22.       IF NOT EXISTS (SELECT * FROM ChitietSV WHERE id=@SinhvienID)
    23.         BEGIN
    24.           /*insert DL vào bảng ChitietSV */
    25.           INSERT ChitietSV VALUES (@SinhvienID,@Doituong,@Tongiao)
    26.         END
    với cái proc này bạn ko phải lo sẽ có những thông báo lỗi khi trùng khóa hoặc duplicate vì nó đã loại bỏ những trường hợp đó,nếu DL của bạn nhập vào ko chính xác thì nó sẽ bỏ qua thủ tục insert và bỏ qua luôn thông báo lỗi,nói chung là nó ko làm gì

    +)tạo 2 table với cấu trúc phía dưới (quan hệ 1-n)
    vẫn dùng bảng Sinhvien phía trên
    SQL Code:
    1. USE mydatabase
    2. GO
    3. CREATE TABLE Lop (
    4. Lopid NCHAR(5) NOT NULL PRIMARY KEY,
    5. Tenlop nvarchar(10),
    6. Khoahoc NCHAR(10)
    7. )
    8. GO
    9. ALTER TABLE Sinhvien
    10. ADD CONSTRAINT SV$Lop
    11. FOREIGN KEY (Lopid) REFERENCES Lop(Lopid)
    việc tạo proc insert với 2 bảng Lop và Sinhvien đơn giản hơn với 2 bảng trên vì 2 bảng này có quan hệ 1-n vì vậy bảng Sinhvien có thể xuất hiện hơn 1 lần giá trị field Lopid trùng nhau nên ta ko cần kiểm tra sự tồn tại của Lopid trong bảng Sinhvien
    SQL Code:
    1. USE mydatabase
    2. GO
    3. CREATE PROCEDURE sp_insertLop (
    4. @Lopid NCHAR(5),
    5. @Tenlop nvarchar(10),
    6. @Khoahoc NCHAR(10)
    7. @SinhvienID INT,
    8. @Hoten nvarchar(50),
    9. @Ngaysinh datetime
    10. )
    11. AS
    12.   /*nếu ko tồn tại mã lớp = @Lopid trong bảng Sinhvien thì mới cho insert */
    13.   IF NOT EXISTS (SELECT * FROM Lop WHERE Lopid=@Lopid)
    14.       BEGIN
    15.         /*insert DL vào 2 bảng Lop và Sinhvien */
    16.         INSERT Lop VALUES (@Lopid,@Tenlop,@Khoahoc)
    17.         INSERT Sinhvien VALUES (@SinhvienID,@Hoten,@Ngaysinh,@Lopid)
    18.       END
    19.     /*ngược lại */
    20.     ELSE
    21.       /*nếu chưa tồn tại mã SV = @SinhvienID trong bảng ChitietSV thì mới cho insert vào bảng này */
    22.       /*if not exists (select * from ChitietSV where id=@SinhvienID) */
    23.         BEGIN
    24.           /*insert DL vào bảng Sinhvien */
    25.           INSERT Sinhvien VALUES (@SinhvienID,@Hoten,@Ngaysinh,@Lopid)
    26.         END
    tất nhiên 2 cái proc này chỉ đảm bảo DL liên quan trong nội bộ 2 bảng,tức là ràng buộc quan hệ trong nội bộ 2 bảng đó thôi,nếu các bảng của bạn chứa các khóa kết nối đến bảng thứ 3 thì nó ko đảm bảo là sẽ ko thông báo error nếu DL ko hợp lệ(thông báo là cần thiết),nếu muốn bắt luôn lỗi các ràng buộc đến bảng thứ 3 thì bạn dựa vào 2 cái proc này để thêm các điều kiện if (l ồ n g nhau) cho phù hợp
    hi vọng chúng giúp ích được cho các bạn
    Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà nội
    Bài viết
    77

    Mặc định Thiết lập lại khóa chính cho bảng bất kỳ

    5/Thay đổi khóa chính cho bảng bất kỳ
    +)hãy bắt bắt đầu với 1 bảng cụ thể
    SQL Code:
    1. USE MyDatabase
    2. CREATE TABLE MyTable (
    3. ID INT IDENTITY NOT NULL,
    4. Ma NCHAR(3) NOT NULL PRIMARY KEY,
    5. Ten nvarchar(50) NOT NULL,
    6. Ghichu nvarchar(100)
    7. )
    8. GO
    9. INSERT MyTable(Ma,Ten,Ghichu) VALUES ('001',N'Bức thư tình thứ một','Good')
    10. INSERT MyTable(Ma,Ten,Ghichu) VALUES ('002',N'Bức thư tình thứ hai','Perfect')
    11. INSERT MyTable(Ma,Ten,Ghichu) VALUES ('003',N'Bức thư tình thứ ba','Not exist')
    12. GO
    +)tạo 1 procedure thực hiên việc thay đổi khóa chính cho bảng MyTable ở trên
    SQL Code:
    1. USE MyDatabase
    2. GO
    3. CREATE PROCEDURE AlterPK (
    4. @TableName nvarchar(20),
    5. @NewPKName nvarchar(20),
    6. @FieldName nvarchar(20)
    7. )
    8. AS
    9.     DECLARE @OldPKName nvarchar(200)
    10.     /* truy tìm khóa chính tồn tại trong Table */
    11.     SET @OldPKName=(
    12.     SELECT sys.objects.name
    13.     FROM sys.objects,sys.TABLES
    14.     WHERE sys.TABLES.object_id=sys.objects.parent_object_id
    15.     AND sys.objects.TYPE='PK' AND sys.TABLES.name=@TableName
    16.     )
    17.     /* nếu không tìm thấy thì thiết lập khóa chính cho Table */
    18.     IF @OldPKName=''
    19.         BEGIN
    20.         DECLARE @sqladd1 nvarchar(200)
    21.             SET @sqladd1='alter table ' + @TableName +
    22.             ' add constraint ' + @NewPKName +
    23.             ' primary key (' + @FieldName + ')'
    24.             EXEC (@sqladd1)
    25.         END
    26.       /* ngược lại hủy khóa chính tồn tại và thiết lập lại khóa chính cho Table */
    27.       ELSE
    28.         BEGIN
    29.             //hủy
    30.             DECLARE @sqldrop nvarchar(200)
    31.             SET @sqldrop='alter table ' + @TableName +
    32.             ' drop constraint ' + @OldPKName
    33.             EXEC (@sqldrop)
    34.             ------------------
    35.             //tạo mới
    36.             DECLARE @sqladd2 nvarchar(200)
    37.             SET @sqladd2='alter table ' + @TableName +
    38.             ' add constraint ' + @NewPKName +
    39.             ' primary key (' + @FieldName + ')'
    40.             EXEC (@sqladd2)
    41.         END
    +)cách dùng
    SQL Code:
    1. EXEC AlterPK 'MyTable','MyTable_PK','Ten'
    +)kết quả : khóa chính được thiết lập trên field Ma bị hủy,thay vào đó 1 khóa mới được thiết lập trên field Ten

    +)lưu ý : field muốn thiết lập khóa chính phải chứa DL ko trùng lặp và ko chứa giá trị NULL
    Đã được chỉnh sửa lần cuối bởi thanhlv : 25-11-2007 lúc 08:54 PM.
    Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Lâu quá rồi mới vào. Đọc dòng đầu có ý kiến liền.
    Để tạo thứ tự cho 1 bảng, riêng với SQL Server 2005 có cách sau:

    select row_number() over (order by [Name] asc) as [Index], A.* from A;

    ^^

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    8

    Với mình truy vấn thì ko có j nhưng về mảng store thì botay.nước mắm luôn
    Trong Cviet mà vẫn có mấy bác pro đủ thứ --> phục
    PHP Code:
    Hên thậtmình wa môn này rồi, =)) 

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Mặc định Một số mẹo vặt trong MS SQL

    Khi đổ dữ liệu vào dataset mình thêm 1 trường Số thứ tự (STT) đặt thuộc tính cho nó tự tăng, thế là xong.

  7. #7
    Ngày gia nhập
    04 2008
    Bài viết
    5

    mình chưa học đến, nhưng thấy các anh làm hay thật á...khâm phục...

  8. #8
    Ngày gia nhập
    09 2007
    Bài viết
    724

    thêm một thủ thuật.
    PHP Code:
    có bảng aaa
    create table aaa
    (
    ma intten nvarchartuoi int
    )
    tạo bảng b có cấu trúc:
    create table bbb(
    ma intten nvarchar

    khi muốn insert nhiều dòng từ bảng aaa vào bảng bbb với 1 điều kiện nào đó
    thì hô biến với câu lệnh:


    PHP Code:
     insert into bbb(ma,tenvalues(select a.maa.ten from aaa a where tuoi=12
    một chút đóng góp vô cho nó thêm râu ria.
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 21-08-2008 lúc 11:00 PM.

  9. #9
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Vậy nếu 2 bảng a và b nằm ở 2 db khác nhau thì có thể insert toàn bộ bảng a vào bảng b được ko? nếu được thì câu store như thế nào ^_^

  10. #10
    Ngày gia nhập
    11 2007
    Bài viết
    294

    The answer is using database link.

    For more infomation, check this : http://database.ittoolbox.com/docume...er-server-1653
    Is the moon rising...

Các đề tài tương tự

  1. Mẹo vặt gia đình nhỏ
    Gửi bởi vanthangbk trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 27-12-2012, 11:49 PM
  2. Mẹo tiết kiệm trong in ấn quảng cáo
    Gửi bởi thanhhung2013 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 30-09-2011, 05:10 PM
  3. 800 mẹo vặt trong cuộc sống (cực cực hữu ích ^^!)
    Gửi bởi cat_street447 trong diễn đàn Giải trí - Thư giãn
    Trả lời: 0
    Bài viết cuối: 16-07-2011, 01:44 PM
  4. Mười mẹo nhỏ cho việc chọn CPU
    Gửi bởi neverland87 trong diễn đàn Thắc mắc chung
    Trả lời: 1
    Bài viết cuối: 11-04-2007, 05:40 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn