Truy vấn trong SQL?

Liên hệ QC
Em tạo User Login rồi test xem User đó hoạt động như thế nào, không ảnh hưởng gì đâu. Tạo một Database tạm rồi thử nghiệm trên database đó thôi. Trong hình cái database "abc" là database tạm.

View attachment 238774 View attachment 238775


View attachment 238776

View attachment 238777

Xin cảm ơn ongke0711 nhiều ạ,
Hướng dẫn bằng hình anh thế này rất dễ hiểu.
Muốn chỉ cho dùng "SELECT.." là: chỉ cần chọn "db_datareader" ạ Anh?
vậy còn các db_ còn lại là những gì vậy Anh?
 
Xin cảm ơn ongke0711 nhiều ạ,
Hướng dẫn bằng hình anh thế này rất dễ hiểu.
Muốn chỉ cho dùng "SELECT.." là: chỉ cần chọn "db_datareader" ạ Anh?
vậy còn các db_ còn lại là những gì vậy Anh?

Em kiếm tài liệu đọc thêm nhe. Cái vụ phân quyền của SQL Server nó rộng lắm, anh không hướng dẫn nỗi đâu.. :)
 
Stored Procedure (1) chứ không phải Store Procedure (2).

(1) Tiếng Anh, trạng thái past participle được dùng cho tình huống thụ động (được/bị). Ở đây nói cái procedure (phương thức) được stored (lưu trữ/chứa) sẵn.

(2) cũng trong tiếng Anh, trường hợp 2 này thì Store là danh tự được dùng như tĩnh để bổ nghĩa cho danh tự đi tiếp theo. Và vì hai tự được hiểu theo danh cho nên từ thứ nhất là cửa hàng (kho), và từ thứ hai là quy trình. Dịch hai từ là quy trình cửa hàng.
 
Stored Procedure (1) chứ không phải Store Procedure (2).

(2) cũng trong tiếng Anh, trường hợp 2 này thì Store là danh tự được dùng như tĩnh để bổ nghĩa cho danh tự đi tiếp theo. Và vì hai tự được hiểu theo danh cho nên từ thứ nhất là cửa hàng (kho), và từ thứ hai là quy trình. Dịch hai từ là quy trình cửa hàng.

Từ "thủ tục thường trú" biến thành "qui trình cửa hàng" chỉ vì 1 ký tự. :)
 
Em tạo User Login rồi test xem User đó hoạt động như thế nào, không ảnh hưởng gì đâu. Tạo một Database tạm rồi thử nghiệm trên database đó thôi. Trong hình cái database "abc" là database tạm.

View attachment 238774 View attachment 238775


View attachment 238776

View attachment 238777
Xin chào ongke0711,
Theo hướng dẫn của Anh, OT đã tạo được một UserName đăng nhập mới và để quyền cho các DB là "db_datareader " giờ công việc còn lại là test
Anh có thể chỉ cho OT câu lệnh thêm mới 1 dòng dữ liệu hoặc chỉnh sửa / xóa một dòng dữ liệu bất kỳ trong bảng ODER này được không ạ.
Chỉ cần câu lệnh viết thẳng trong SQL luôn không cần phải qua Excel đâu ạ.
Cảm ơn Anh nhiều ạ.
1591345394807.png
 
Xin chào ongke0711,
Theo hướng dẫn của Anh, OT đã tạo được một UserName đăng nhập mới và để quyền cho các DB là "db_datareader " giờ công việc còn lại là test
Anh có thể chỉ cho OT câu lệnh thêm mới 1 dòng dữ liệu hoặc chỉnh sửa / xóa một dòng dữ liệu bất kỳ trong bảng ODER này được không ạ.
Chỉ cần câu lệnh viết thẳng trong SQL luôn không cần phải qua Excel đâu ạ.
Cảm ơn Anh nhiều ạ.
View attachment 238786
A! OT thấy rồi những câu lệnh này tìm kiếm là dễ thấy hihi..
 
Anh có thể chỉ cho OT câu lệnh thêm mới 1 dòng dữ liệu hoặc chỉnh sửa / xóa một dòng dữ liệu bất kỳ trong bảng ODER này được không ạ.
Chỉ cần câu lệnh viết thẳng trong SQL luôn không cần phải qua Excel đâu ạ.
Cảm ơn Anh nhiều ạ.
View attachment 238786

Thao tác ngay trong SSMS, tạo New query rồi gõ câu lệnh nay vô:

Insert Into dbo.tblHangHoa (STT,MA_HANG,SOLUONG) Values (4,'MH0006',100)

Delete From dbo.tblHangHoa Where STT=3
 
Các bác cho em hỏi làm cách nào để biết số dòng chứa SQL của mình ? Cám ơn các bác
 
Thao tác ngay trong SSMS, tạo New query rồi gõ câu lệnh nay vô:

Insert Into dbo.tblHangHoa (STT,MA_HANG,SOLUONG) Values (4,'MH0006',100)

Delete From dbo.tblHangHoa Where STT=3
Xin chào ongke0711,
OT thử đăng nhập với User vừa mới tạo và thử với câu lệnh sau:
UPDATE [OT_TEST].[dbo].[ODER] SET MA_HANG= 'MH1102' WHERE STT=2;
Hệ thống báo:
The UPDATE permission was denied on the object 'ODER', database 'OT_TEST', schema 'dbo'.
Như vậy là OK rồi phải không Anh :))
 
Xin chào ongke0711,
OT thử đăng nhập với User vừa mới tạo và thử với câu lệnh sau:
UPDATE [OT_TEST].[dbo].[ODER] SET MA_HANG= 'MH1102' WHERE STT=2;
Hệ thống báo:
The UPDATE permission was denied on the object 'ODER', database 'OT_TEST', schema 'dbo'.
Như vậy là OK rồi phải không Anh :))
Đúng rồi OT đã thử chính xác là vậy.
Khi chuyển User chính thì câu lệnh trên OK, với thông báo "(1 row affected)"
Sau dó OT kiểm tra lại dữ liệu đã thay đổi, còn với User mới tạo thì không..
OT Cảm ơn Anh ongke0711 nhiều ạ
 
Định nghĩa thế nào là một dòng?
Sub test()
Dim cn As Object, rst As Object
Dim mySQL As String
Set cn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
If Val(Application.Version) < 12 Then
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"";"
Else
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"";"
End If
.Open
End With
mySQL = "select * from BC_TONG where C5 = '" & (Sheet6.Range("S2")) & "'" & _
"and C6 = '" & (Sheet6.Range("T2")) & "'" & _
"and C7 = '" & (Sheet6.Range("U2")) & "'" & _
"and C8*1 = '" & (Sheet6.Range("V2") * 1) & "'" & _
"and C9 = '" & (Sheet6.Range("W2")) & "'" & _
"and C10 = '" & (Sheet6.Range("X2")) & "'" & _
"and C11 = '" & (Sheet6.Range("Y2")) & "' "
Set rst = cn.Execute(mySQL)
Range("o3").CopyFromRecordset rst
' tim dong chua mySQL trong du lieu
Dim i As Long
'i = Sheet6.Range("A1:M20000").Find("rst").Row
Set rst = Nothing: Set cn = Nothing

End Sub
Bác xem giúp
 
mySQL = "select * from BC_TONG where C5 = '" & (Sheet6.Range("S2")) & "'" & _
"and C6 = '" & (Sheet6.Range("T2")) & "'" & _
"and C7 = '" & (Sheet6.Range("U2")) & "'" & _
"and C8*1 = '" & (Sheet6.Range("V2") * 1) & "'" & _
"and C9 = '" & (Sheet6.Range("W2")) & "'" & _
"and C10 = '" & (Sheet6.Range("X2")) & "'" & _
"and C11 = '" & (Sheet6.Range("Y2")) & "' "
Luật đáng ghi nhớ: khi viết câu string cho lệnh SQL, đừng bao giờ tiết kiệm số dấu cách.
Và do vậy:
Mẹo tốt để tránh lỗi khi viết một câu lệnh SQL: luôn luôn mở đầu chuỗi bằng dấu cách. Trừ phi chỗ đó là tham số.

mySQL = " select * from BC_TONG where C5 = '" & (Sheet6.Range("S2")) & "'" & _
" and C6 = '" & (Sheet6.Range("T2")) & "'" & _ (dấu cách thêm vào trước and, nhưng không trước dấu nháy ' , vì ' là một phần của tham số)
" and C7 = '" & (Sheet6.Range("U2")) & "'" & _
" and C8*1 = '" & (Sheet6.Range("V2") * 1) & "'" & _
" and C9 = '" & (Sheet6.Range("W2")) & "'" & _
" and C10 = '" & (Sheet6.Range("X2")) & "'" & _
" and C11 = '" & (Sheet6.Range("Y2")) & "' "
 
Luật đáng ghi nhớ: khi viết câu string cho lệnh SQL, đừng bao giờ tiết kiệm số dấu cách.
Và do vậy:
Mẹo tốt để tránh lỗi khi viết một câu lệnh SQL: luôn luôn mở đầu chuỗi bằng dấu cách. Trừ phi chỗ đó là tham số.

mySQL = " select * from BC_TONG where C5 = '" & (Sheet6.Range("S2")) & "'" & _
" and C6 = '" & (Sheet6.Range("T2")) & "'" & _ (dấu cách thêm vào trước and, nhưng không trước dấu nháy ' , vì ' là một phần của tham số)
" and C7 = '" & (Sheet6.Range("U2")) & "'" & _
" and C8*1 = '" & (Sheet6.Range("V2") * 1) & "'" & _
" and C9 = '" & (Sheet6.Range("W2")) & "'" & _
" and C10 = '" & (Sheet6.Range("X2")) & "'" & _
" and C11 = '" & (Sheet6.Range("Y2")) & "' "
Câu lệnh SQL thì tạm ổn bác ạ , nhưng h em muốn tìm vị trí nó nằm ở hàng nào trong bảng BC_TONG , có phương án nào ko bác . Có thể trong mySQL có nhiều dữ liệu , mình biết tất cả số dòng chứa dữ liệu my SQL
 
Xin chào các bạn,
Nhờ các bạn xem & giúp tôi trường hợp sau với ạ:
Tôi có một dữ liệu ban đầu bảng(sheet) S, dùng câu lệnh SQL nào có thể ra được đầu ra dữ liệu như bảng(sheet) R.
Tổng hợp số lượng duy nhất theo tại bảng S theo các trường: CODE,INW,OUTW,TYPE
Nếu TYPE=2 thì bảng R sẽ tạo thêm các trường cột: INW2,OUTW2,QTY2 và nhập các dữ liệu duy nhất theo TYPE=2

Bảng(sheet) S:
1601966469587.png

Bảng(sheet) R:
1601966523790.png
 

File đính kèm

  • S,R.xlsx
    12.3 KB · Đọc: 7
Xin chào các bạn,
Nhờ các bạn xem & giúp tôi trường hợp sau với ạ:
Tôi có một dữ liệu ban đầu bảng(sheet) S, dùng câu lệnh SQL nào có thể ra được đầu ra dữ liệu như bảng(sheet) R.
Tổng hợp số lượng duy nhất theo tại bảng S theo các trường: CODE,INW,OUTW,TYPE
Nếu TYPE=2 thì bảng R sẽ tạo thêm các trường cột: INW2,OUTW2,QTY2 và nhập các dữ liệu duy nhất theo TYPE=2

Bảng(sheet) S:
View attachment 246841

Bảng(sheet) R:
View attachment 246842
Dùng UNION ALL với điều kiện TYPE=2 sau đó gom nhóm lại là được nhé.
 
Web KT
Back
Top Bottom