• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Sqlcmd trong Command Prompt-Thực thi T-SQL và Scripts

Các bài viết hướng dẫn và tham khảo chung, không thuộc ngôn ngữ nào

Điều hành viên: vietluyen

Hình đại diện của người dùng
thanhlv
Thành viên tích cực
Thành viên tích cực
Bài viết: 124
Ngày tham gia: T.Bảy 18/11/2006 11:49 pm
Đến từ: Hà Nội
Liên hệ:

Sqlcmd trong Command Prompt-Thực thi T-SQL và Scripts

Gửi bàigửi bởi thanhlv » T.Năm 16/10/2008 4:51 pm

Tên bài viết: Sử dụng tiện ích Sqlcmd trong Command Prompt
Tác giả: thanhlv
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Để thực hiện các tác vụ trên Database(SQL Server) có lẽ nhiều người hay dùng công cụ có sẵn "SQL Server Management Studio"
Bài viết này giới thiệu đến các bạn tiện ích sqlcmd được sử dụng trong Command Prompt


-Sqlcmd là 1 tiện ích của Microsoft Win32 command-prompt dùng cho việc thực thi(tương tác) với các phát biểu Transact-SQL và các kịch bản có sẵn.Để dùng Sqlcmd,bạn cần hiểu về Transact-SQL
-Để chạy tiện ích Sqlcmd,mở cửa command-prompt bằng cách click Menu Start,chọn Programs,chọn Accessories,click Command Prompt,hoăc Start\Run\gõ cmd,hoặc chạy Notification Services Command Prompt của SQL Server,....
-Để chạy Sqlcmd bạn gõ sqlcmd trong cửa sổ command-prompt,theo sau là danh sách các đối số chỉ ra các lựa chọn mà bạn yêu cầu
-Các đối số hay dùng :-S,-Q,-E,-U,-P,-q,-i,-o,-u,...(gõ sqlcmd -? hoặc tham khảo SQL Server Book Online) :D

Bây giờ cùng bắt đầu nghịch ngợm với SQLCMD thôi :
+Kết nối đến SQL Server ở chế độ Windows Authentication
trong command-prompt gõ (dùng đối số -S)

Mã: Chọn hết

  1. sqlcmd -S ComputerName

+Kết nối đến SQL Server ở chế độ SQL Server Authentication với 1 tài khoản,ở đây tớ chọn sa
thêm đối số -U để xác định user name đăng nhập

Mã: Chọn hết

  1. sqlcmd -U user_name -S ComputerName

command-prompt hiện ra 1 thông báo yêu cầu nhập password ứng với tài khoản sa,bạn nhập password và enter.
ví dụ máy tính của tớ tên là bandungthu,kết quả như hình dưới
connect.JPG


Giờ thử đọc nội dung 1 tập hợp các bản ghi được lấy trong database
để thực thi 1 câu truy vấn và cho hiện kết quả ra cửa sổ commad-prompt ta dùng đối số -q,-Q để command-prompt nhận bết đó là 1 query
ở đây tớ dùng Database PUBS
-gõ lệnh:

Mã: Chọn hết

  1. sqlcmd -q "use pubs select row_number() over (order by au_id) as STT,au_id as MaTacgia,au_lname as TenTacgia from authors"

kết quả như hình dưới
Select_authors_pubs.JPG


Bạn cũng có thể thực thi từng dòng lệnh khi dùng sqlcmd,sau lệnh go,những dòng lệnh bên trên sẽ được thực thi
chạy tiện ích sqlcmd

Mã: Chọn hết

  1. sqlcmd

khai báo database được dùng

Mã: Chọn hết

  1. use pubs

kết thúc bằng lệnh go

viết truy vấn truy xuất dữ liệu từ table authors

Mã: Chọn hết

  1. select row_number() over (order by au_id) as STT,au_id as MaTacgia,au_lname as TenTacgia from authors

kết thúc bằng lệnh go

kết quả như hình dưới
Select_authors_pubs1.JPG

bài viết này chỉ ra cho bạn 1 số thao tác cơ bản khi dùng tiện ích sqlcmd
tớ sẽ trình bày chi tiết về tiện ích này ở bài viết tới(thực thi(tương tác) với các phát biểu Transact-SQL và các kịch bản)
cơ bản là cần hiểu biết tương đối về T-SQL
Sửa lần cuối bởi thanhlv vào ngày T.Sáu 17/10/2008 3:51 pm với 2 lần sửa.


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
http://giaiphapit.vn

Hình đại diện của người dùng
thanhlv
Thành viên tích cực
Thành viên tích cực
Bài viết: 124
Ngày tham gia: T.Bảy 18/11/2006 11:49 pm
Đến từ: Hà Nội
Liên hệ:

Re: Sử dụng tiện ích Sqlcmd trong Command Prompt

Gửi bàigửi bởi thanhlv » T.Sáu 17/10/2008 11:46 am

Tên bài viết: Thực thi các Transact-SQL với Sqlcmd


Để tiện cho việc thực thi trước tiên thử tạo 1 sample database

Mã: Chọn hết

  1. sqlcmd -U sa -S bandungthu

Mã: Chọn hết

  1. create database sqlcmd_Db on primary (
  2. name=sqlcmd_Db,
  3. filename='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\sqlcmd_Db.mdf',
  4. size=2mb,
  5. maxsize=10mb,
  6. filegrowth=10%)
  7. go

kiểm tra xem đoạn code trên có làm được việc ko nhé

Mã: Chọn hết

  1. select name from sys.databases

kết quả như hình dưới
Check_Create_Db.JPG


Tạo bảng và Insert dữ liệu cho nó

Mã: Chọn hết

  1. sqlcmd -d sqlcmd_Db

ý quên,đối số -d để chỉ cho sqlcmd biết ta sẽ dùng database nào

Mã: Chọn hết

  1. create table Mem_VBClub (
  2. id int identity primary key not null,
  3. fname nvarchar(20) not null,
  4. date_join datetime)
  5. go
  6.  

tạo procedure insert dữ liệu vào Mem-VBClub

Mã: Chọn hết

  1. create procedure Insert_Db
  2. as
  3. declare @count int
  4. set @count=1
  5. while @count<=10
  6. begin
  7. insert Mem_VBClub(fname,date_join) values ('bandungthu' + convert(nvarchar(2),@count),convert(nvarchar(2),@count) + '/10/2008')
  8. set @count=@count+1
  9. end
  10. go

chạy procedure

Mã: Chọn hết

  1. exec Insert_Db
  2. go

createTb.JPG

thử kiểm tra xem nó làm gì

Mã: Chọn hết

  1. select * from Mem_VBClub

Check_SelectDb.JPG

đơn giản phải ko ?
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
http://giaiphapit.vn

Hình đại diện của người dùng
thanhlv
Thành viên tích cực
Thành viên tích cực
Bài viết: 124
Ngày tham gia: T.Bảy 18/11/2006 11:49 pm
Đến từ: Hà Nội
Liên hệ:

Re: Sử dụng tiện ích Sqlcmd trong Command Prompt

Gửi bàigửi bởi thanhlv » T.Sáu 17/10/2008 3:47 pm

Tên bài viết: Thực thi các kịch bản với Sqlcmd


Để làm việc với các kịch bản,trước tiên ta cần tạo ra các kịch bản để thao tác với chúng
Mở 1 trình soạn thảo bất kì,tớ dùng notepad cho tiện,soạn 1 đoạn truy vấn thực hiện các nhiệm vụ bạn yêu cầu và lưu nó với đuôi .sql

Mã: Chọn hết

  1. use pubs
  2. select top (select count(*)-1 from sys.tables) row_number() over (order by name) as STT,name
  3. from sys.tables

tớ lưu nó thành file C:\Myfolder\sqlscript.sql
bi giờ thử chọc vào nó xem nó làm gì nhé

Mã: Chọn hết

  1. sqlcmd -i c:\myfolder\sqlscript.sql

đối số -i giúp sqlcmd nhận biết đó là 1 file đầu vào
kết quả phía dưới
Check_SelectDb1.JPG

Bạn cũng có thể xuất dữ liệu từ 1 chuỗi truy vấn hoặc từ kết quả của 1 script ra 1 text file
-Xuất dữ liệu từ chuỗi truy vấn ra text file(.txt, .doc, .html, ...)

Mã: Chọn hết

  1. sqlcmd -d sqlcmd_Db -q "select fname,date_join from Mem_VBClub" -o c:\myfolder\sqloutput.txt

đối số -o giúp sqlcmd nhận biết đó là 1 file đầu ra
bạn cũng có thể thêm đối số -u để in được dữ liệu unicode ra text file
sửa đoạn lệnh phía trên thành

Mã: Chọn hết

  1. sqlcmd -d sqlcmd_Db -q "select fname,date_join from Mem_VBClub" -u -o c:\myfolder\sqloutput.txt

một file sqloutput.txt được tạo ra chứa kết quả lấy từ câu truy vấn
thử làm và kiểm chứng kết quả

-Xuất kết quả khi thực thi 1 script ra text file

Mã: Chọn hết

  1. sqlcmd -i c:\myfolder\sqlscript.sql -o c:\myfolder\sqloutput.doc

file sqloutput.doc sẽ chứa kết quả được lấy từ việc thực thi script chứa trong sqlscript.sql
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
http://giaiphapit.vn

Hình đại diện của người dùng
thanhlv
Thành viên tích cực
Thành viên tích cực
Bài viết: 124
Ngày tham gia: T.Bảy 18/11/2006 11:49 pm
Đến từ: Hà Nội
Liên hệ:

Re: Sqlcmd trong Command Prompt-Thực thi T-SQL và Scripts

Gửi bàigửi bởi thanhlv » T.Bảy 18/10/2008 10:56 am

Tên bài viết: Biến kịch bản trong Sqlcmd


-Biến được dùng trong các kịch bản gọi là biến kịch bản,nó mang lại cho bạn tính linh hoạt khi chạy một tập lệnh trong các kịch bản.
-Biến kịch bản được định nghĩa bởi lệnh setvar,hoặc bằng các đối số sqlcmd.Biến được định nghĩa bởi setvar được lưu trữ nội tại.Biến kịch bản ko được lẫn lộn với các biến môi trường,nếu biến được định nghĩa bởi setvar trong môi trường biến có chứa biến cùng tên,biến định nghĩa dùng setvar sẽ được ưu tiên.Nếu 1 tập lệnh tham chiếu đến 1 biến ko chứa trong môi trường biến hoặc ko được định nghĩa bởi setvar,một thông báo lỗi được đưa ra và quá trình thực thi 1 kịch bản sẽ bị dừng lại.
-Khi chạy sqlcmd với 1 đối số nghĩa là có liên quan đến biến sqlcmd,ta có thể dùng đối số -v để thiết đặt 1 biến kịch bản tồn tại trong 1 kịch bản
-Các nguyên tắc khi sử dụng 1 biến kịch bản:
+Tên biến phải ko chứa kí tự trống
+Tên biến phải không có cùng một đơn mẫu như các biểu thức
+Cách sử dụng tên biến : $(variable)
+Tên biến phải được trích dẫn nếu chuỗi giá trị chứa khoảng trống
+Nếu dấu nháy là 1 phần của tên biến,nó cần được thoát.
-Nếu ko có giá trị nào được gán cho biến môi trường sqlcmd,nó sẽ được giải phóng

-Sử dụng setvar trong một kịch bản
Các lựa chọn sử dụng sqlcmd có thể được kiểm soát trong một tập lệnh sử dụng setvar
Thử bắt đầu với 1 kịch bản

Mã: Chọn hết

  1. :setvar ten "name"
  2. :setvar kieu "'U'"
  3. use pubs
  4. select $(ten) from sys.objects where type=$(kieu)

tớ lưu nó thành C:\MyFolder\test.sql
giờ thử chạy script trên với sqlcmd nhé

Mã: Chọn hết

  1. sqlcmd -i c:\myfolder\test.sql

xem kết quả
testsetvar.JPG

-Sử dụng setvar tương tác
ta có thể sử dụng lệnh setvar ngay trong môi trường sqlcmd
nhập đoạn lệnh trong môi trường sqlcmd

Mã: Chọn hết

  1. sqlcmd
  2. :setvar code 5
  3. use sqlcmd_Db
  4. select * from Mem_VBClub where id=$(code)
  5. go

thử xem kết quả
setvar_interactively.JPG

-Môi trường biến trong sqlcmd
môi trường biến được thiết đặt tên và được gọi từ bên trong sqlcmd

Mã: Chọn hết

  1. set ten=Mem_VBClub
  2. sqlcmd -d sqlcmd_Db
  3. select top 5 * from $(ten)
  4. go

xem hình minh họa
environment_var_sqlcmd.JPG

-Sử dụng một tập lệnh khởi tạo
tạo 1 kịch bản,tớ dùng sqlscript.sql có sẵn ở các bài viết trên
gõ đoạn lệnh này trong command-prompt

Mã: Chọn hết

  1. set runscript=c:\myfolder\sqlscript.sql
  2. sqlcmd

trong đoạn lệnh trên 1 kịch bản sẽ được thưc thi khi chạy sqlcmd,môi trường biến runscript được thiết đặt và nó được gọi khi sqlcmd bắt đầu
xem kết quả
startup_script.JPG

-Sử dụng đối số -v
sau đối số -v ta có thể gán cho tên biến giá trị trả về(biến này chứa trong kịch bản nào đó)
tạo 1 kịch bản

Mã: Chọn hết

  1. use sqlcmd_Db
  2. insert Mem_VBClub(fname,date_join) values ($(ten),$(ngay))
  3. go

lưu nó thành C:\MyFolder\MySql.sql
giờ chạy đoạn script trên

Mã: Chọn hết

  1. sqlcmd -v ten="'thanhlv'" -v ngay="'11/18/2006'" -i c:\myfolder\mysql.sql

với đoạn script chứa nhiều biến thì ta gán lần lượt các giá trị cho từng biến sau đối số -v
kiểm tra xem thế nào

Mã: Chọn hết

  1. sqlcmd -d sqlcmd_Db -q "select * from Mem_VBClub"

xem hình
InsertMem.JPG
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
http://giaiphapit.vn


Quay về “Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách