Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: [Solved]default, dễ hay là khó nhỉ?

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

    Mặc định [Solved]default, dễ hay là khó nhỉ?

    Có một bảng về sau về Transaction:
    _Transaction_Id
    _Transaction_Description
    _Transaction_Date
    Đơn giản vậy thôi ^^
    Với yêu cầu:
    _Transaction_id định dạng P[0-9][0-9][0-9] tự tăng
    _Transaction_Description not null
    _Transaction_Date mặc định là ngày hiện tại, khi không được nhập.
    Gặp khó khăn
    _Cho tự tăng mình dùng 2 procedure, một cho tự tăng, và cái thứ 2 chỉ đến proc 1 để insert vào bảng.
    _Khi cho chạy proc 2, thì lệnh default không thực hiện được (hiển nhiên rồi )
    _Sửa dùng trigger, thì nó yêu cầu phải insert Transaction_Id, mà cái này tự tăng --> thất bại.
    _Sửa proc để nó chấp nhận default, không được --> thất bại.

    Có cách nào không? Chỉ mình với
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    offline as always

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

    hiểu chết liề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
    11 2007
    Bài viết
    4

    HÌnh như đang nói về CSDL, mà chẳng biết nó là CSDL gì?

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

    Có một bảng về sau về Transaction:
    _Transaction_Id
    _Transaction_Description
    _Transaction_Date
    Đơn giản vậy thôi ^^
    Với yêu cầu:
    _Transaction_id định dạng P[0-9][0-9][0-9] tự tăng
    _Transaction_Description not null
    _Transaction_Date mặc định là ngày hiện tại, khi không được nhập.
    Gặp khó khăn
    _Cho tự tăng mình dùng 2 procedure, một cho tự tăng, và cái thứ 2 chỉ đến proc 1 để insert vào bảng.
    _Khi cho chạy proc 2, thì lệnh default không thực hiện được (hiển nhiên rồi )
    _Sửa dùng trigger, thì nó yêu cầu phải insert Transaction_Id, mà cái này tự tăng --> thất bại.
    _Sửa proc để nó chấp nhận default, không được --> thất bại.
    Bạn chú ý về Trigger nhé.
    Ta chỉ sử dụng trigger khi mà các biện pháp bảo đảm data intergrity khác như Constraints không thể thỏa mãn yêu cầu của ứng dụng. Nên nhớ Constraint thuộc loại Declarative Data Integrity cho nên sẽ kiểm tra data trước khi cho phép nhập vào table trong khi Trigger thuộc loại Procedural Data Integrity nên việc insert, update, delete đã xảy ra rồi mới kích hoạt trigger. Chính vì vậy mà ta cần cân nhắc trước khi quyết định dùng loại nào trong việc đảm bảo Data Integrity

    Còn vấn đề của bạn, chưa hiểu cái P[0-9][0-9][0-9] là cái gì bạn nói rõ thêm đi.
    Àh, 2 cái procedure của bạn là sao? Bạn đưa lên đây cụ thể để biết mục đích của bạn là gì chứ? Mà nếu mình không lầm thì bạn phải gọi nó là stored procedure mới đúng chứ nhỉ.
    Mà tại sao lại có cái sp thứ 2 trỏ vào 1 để làm gì? Sao không để cái sp 1 nó check trong Transaction_ID rồi nó tự động tăng lên?

    Bạn redefine cái vấn đề rõ hơn chút nữa nhé.
    Regards,
    Đã được chỉnh sửa lần cuối bởi hung.tran : 04-12-2007 lúc 02:59 PM.

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

    SQL SERVER 2000
    - P[0-1][0-1][0-1] là định dạng đó bạn ^^

    Tạo bảng ^^
    Code:
    CREATE TABLE TRANSACTIONS
    (
    cTRANSACTION_ID char(4) CONSTRAINT PKTRANSACTION_ID PRIMARY KEY,
    dTRANSACTION_DATE DATETIME default getdate(),
    cTRANSACTION_DESCRIPTION varchar(100)
    )
    Tự tăng
    Code:
    create proc prcAutoGenerated_transaction @Auto char(4) output
    as
    select @Auto=max(cTRANSACTION_ID) from TRANSACTIONS
    if @Auto is null
       select @Auto='P001'
    else
       begin
          select @Auto=right(@Auto,3)
          select @Auto=
          case
             when @Auto>=0 and @Auto<9 then
                'P00'+convert(char,@Auto+1)
             when @Auto>=9 and @Auto<99 then
                'P0'+convert(char,@Auto+1)
             when @Auto>=99 and @Auto<999 then
                'P'+convert(char,@Auto+1)
          end
       end
    return
    go
    create proc prcAutoDetail_transaction @dTRANSACTION_DATE DATETIME, @cTRANSACTION_DESCRIPTION varchar(100)
    as
    declare @Auto char(4)
    exec proc prcAutoGenerated_transaction @Auto output
    insert into TRANSACTIONS
    values (@Auto,@dTRANSACTION_DATE,@cTRANSACTION_DESCRIPTION)
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    offline as always

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

  1. Bài tập C++ Cách sử dụng câu lệnh default của switch trong vòng lặp while?
    Gửi bởi senbohung trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 05-11-2015, 12:31 PM
  2. Có nên đặt NOT NULL DEFAULT hay không?
    Gửi bởi vnrovio trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 21-11-2012, 09:47 AM
  3. Cách gọi phương thức từ file Default.cs?
    Gửi bởi ltvit0602 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 0
    Bài viết cuối: 16-08-2011, 04:16 PM
  4. Làm sao để set default app của mình mở 1 file?
    Gửi bởi mrKode trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 10-09-2010, 11:20 AM
  5. [Solved] Giúp sửa lỗi khó hiều, bài quản lý nhân viên.
    Gửi bởi nhapmonIT trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 19-09-2008, 11:42 AM

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