Trang 1 / 3 123 LastLast
Hiển thị kết quả từ 1 đến 10 / 23
  1. #1
    Tham gia
    15-12-2009
    Bài viết
    294
    Like
    0
    Thanked 3 Times in 3 Posts

    Một lỗi pó tay của proc trong SQL

    Câu lệnh select Thông thường thế này:
    Code:
    SELECT COUNT(*) FROM Users
            WHERE Users_Pass = '123'
              AND ( Users_ID = 'US0001' OR Users_Name = 'Admin' )
    Ra bình thường kết quả là 1 dù nhập vào ID sai hay Name sai. Ko có gì để nói
    khi viết thành Proc
    Code:
    Create proc User_Login(@Users_ID varchar(6), @Users_Name nvarchar(255), @Users_Pass nvarchar(255))
    as
    begin
    	SELECT COUNT(*) FROM Users
            WHERE Users_Pass = @Users_Pass
              AND ( Users_ID = @Users_ID OR Users_Name = @Users_Name )
    end
    Thì khi thực hiện proc thì đưa vào cả ID và name đều sai nhưng nó vẫn ra 1 mới ác
    vietfun7[.]com - Trang chia sẻ truyện tranh, Manga
    Quote Quote

  2. #2
    Tham gia
    18-05-2010
    Bài viết
    971
    Like
    0
    Thanked 1 Time in 1 Post
    Tại sao lại như thế nhỉ?

  3. #3
    Tham gia
    15-12-2009
    Bài viết
    294
    Like
    0
    Thanked 3 Times in 3 Posts
    Tui đã tìm ra lỗi. Dù đó chẳng phải là lỗi . Đố mọi người lỗi nằm chỗ nào ?
    vietfun7[.]com - Trang chia sẻ truyện tranh, Manga

  4. #4
    Tham gia
    24-02-2010
    Location
    DNTN
    Bài viết
    139
    Like
    42
    Thanked 7 Times in 3 Posts
    Bị gì vậy ????
    Hông biết

  5. #5
    Tham gia
    23-06-2006
    Bài viết
    204
    Like
    0
    Thanked 3 Times in 2 Posts
    Đoán mò nha. Đúng ra bạn phải kiểm tra bằng if EXIST rồi trả kết quả về bằng lệnh RETURN

  6. #6
    Tham gia
    15-12-2009
    Bài viết
    294
    Like
    0
    Thanked 3 Times in 3 Posts
    Quote Được gửi bởi vqt View Post
    Đoán mò nha. Đúng ra bạn phải kiểm tra bằng if EXIST rồi trả kết quả về bằng lệnh RETURN
    Làm gì cần phải như thế Chỉ cần đổi vị trí các đối số truyền vào cho đúng thứ tự trong Where là User_Login(@pass - @id - @name) thì nó lại ra chính xác, pó tay Procedure của SQL
    vietfun7[.]com - Trang chia sẻ truyện tranh, Manga

  7. #7
    Tham gia
    08-01-2010
    Location
    Washington, DC
    Bài viết
    168
    Like
    2
    Thanked 16 Times in 16 Posts
    Quote Được gửi bởi lenggiauit View Post
    Làm gì cần phải như thế Chỉ cần đổi vị trí các đối số truyền vào cho đúng thứ tự trong Where là User_Login(@pass - @id - @name) thì nó lại ra chính xác, pó tay Procedure của SQL
    không hiểu lắm(???) Tôi chạy thử đoạn trên thì vẫn ra kết quả đúng. Tất nhiên khi gọi thì truyền tham số cũng phải đúng, giá trị nào ứng với tham số nào. Cái này thì ngôn ngữ nào cũng yêu cầu phải thế, đâu riêng gì T-SQL?

  8. #8
    Tham gia
    30-10-2007
    Location
    Hà Nội
    Bài viết
    382
    Like
    0
    Thanked 14 Times in 14 Posts

    !!!!!

    Quote Được gửi bởi lenggiauit View Post
    Câu lệnh select Thông thường thế này:
    Code:
    SELECT COUNT(*) FROM Users
            WHERE Users_Pass = '123'
              AND ( Users_ID = 'US0001' OR Users_Name = 'Admin' )
    Ra bình thường kết quả là 1 dù nhập vào ID sai hay Name sai. Ko có gì để nói
    khi viết thành Proc
    Code:
    Create proc User_Login(@Users_ID varchar(6), @Users_Name nvarchar(255), @Users_Pass nvarchar(255))
    as
    begin
    	SELECT COUNT(*) FROM Users
            WHERE Users_Pass = @Users_Pass
              AND ( Users_ID = @Users_ID OR Users_Name = @Users_Name )
    end
    Thì khi thực hiện proc thì đưa vào cả ID và name đều sai nhưng nó vẫn ra 1 mới ác
    Thật ra ở đây không có gì ác cả.. bạn thử xem lại..
    - Bạn cần xác định bạn thực hiện gọi câu truy vấn đó ở môi trường nào, chạy trực tiếp trọng SQL Management Studio hay gọi từ chương trình.
    - Đây là một StoreProcedure, bản chất của nó là thực hiện mà ko trả về giá trị. Cái giá trị mà bạn nhận được thật ra đó là kết quả báo SP đã thực hiện thành công hay không thành công. Thông thường, nếu nó trả về 0 thì SP thực hiện không có lỗi, còn <>0 thì tức là SP này có lỗi thực thi. Bạn cần kiểm tra xem có lỗi trong lúc gọi SP hay không.
    - Trong trường hợp bạn muốn dùng SP để thực hiện việc đăng nhập, bạn phải dùng việc truyền tham số với từ khóa OUTPUT để nhận giá trị sau khi thực hiện SP, hoặc một cách khác bạn có thể dùng Function thay vì SP... Trong Function bạn dùng Return để trả về kết quả

  9. #9
    Tham gia
    28-03-2009
    Bài viết
    124
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi lenggiauit View Post
    Làm gì cần phải như thế Chỉ cần đổi vị trí các đối số truyền vào cho đúng thứ tự trong Where là User_Login(@pass - @id - @name) thì nó lại ra chính xác, pó tay Procedure của SQL
    Chưa bao giờ nghe nói các số tham số truyền vào là 1, 2, 3 thì phải sử dụng lần lượt là 1, 2, 3.
    Cũng chẳng thấy SP lỗi chỗ nào, kết quả vẫn ra đúng.
    Nếu quả thật SP có lỗi thì MS đã dẹp tiệm lậu rồi.

  10. #10
    Tham gia
    15-12-2009
    Bài viết
    294
    Like
    0
    Thanked 3 Times in 3 Posts
    Quote Được gửi bởi tersap View Post
    Chưa bao giờ nghe nói các số tham số truyền vào là 1, 2, 3 thì phải sử dụng lần lượt là 1, 2, 3.
    Cũng chẳng thấy SP lỗi chỗ nào, kết quả vẫn ra đúng.
    Nếu quả thật SP có lỗi thì MS đã dẹp tiệm lậu rồi.
    Một câu nhãm nhất từng nghe ! Ko 1 hãng phần mềm nào dám khẳng định 100% phần mềm của mình ko có lỗi
    Lỗi này có lẽ do sài SQL bản express + tùy OS chạy, còn bản có $ thì ko bị lỗi
    vietfun7[.]com - Trang chia sẻ truyện tranh, Manga

Trang 1 / 3 123 LastLast

Bookmarks

Quy định

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