Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để truyền NULL hoặc chuỗi trống cho tham số đầu vào thủ tục được lưu trữ với ADO và VB?

Một bài kiểm tra nhanh ở đây cho thấy NULL phải thực hiện công việc. Mã mẫu tôi đã sử dụng để kiểm tra (trên một biểu mẫu đơn giản với một nút và một hộp văn bản):

Private Sub Command1_Click()
    Dim dbConn As ADODB.Connection
    Dim dbComm As ADODB.Command
    Dim dbRS As ADODB.Recordset

    Set dbConn = New ADODB.Connection
    With dbConn
        .ConnectionString = "...REPLACE THIS ACCORDINGLY..."
        .ConnectionTimeout = 10
        .Open
    End With
    Set dbComm = New ADODB.Command
    With dbComm
        .ActiveConnection = dbConn
        .CommandType = adCmdStoredProc
        .CommandText = "usp_Bob"
        .Parameters.Append .CreateParameter("b", adVarChar, adParamInput, 10, Null)
        Set dbRS = .Execute
    End With
    Text1.Text = dbRS.Fields.Item(0).Value

    dbRS.Close
    dbConn.Close
End Sub

Và nó được gọi là proc được lưu trữ này:

ALTER PROCEDURE usp_Bob
 @b VARCHAR(10)
AS
 IF @b IS NULL
  SELECT 'NULL' AS '1'
 ELSE
  IF @b = ''
   SELECT 'EMPTY' AS '1'
  ELSE
   SELECT 'NOT NULL AND NOT EMPTY' AS '1'

usp_Bob trả về 'NULL' vì sử dụng giá trị VB Null (theo mẫu ở trên) và 'NOT NULL' cho vbNull . Nếu Null không hiệu quả với bạn, thì tôi không thể bình luận về điều gì có thể sai ...!

Tương tự như vậy, các chuỗi trống cũng phải được chuyển như vậy - một chuỗi rỗng, tức là str = "" - khiến usp_Bob trả về 'EMPTY'. Bất cứ điều gì khác có nó trả về 'NOT NULL VÀ NOT EMPTY' (như mong đợi).

Nếu bạn không thể chuyển NULL qua, thì một tùy chọn khác là truyền một chuỗi rỗng thành NULL trong mầm - tức là

IF @param = ''
    SET @param = NULL

Lưu ý rằng độ dài bạn đi qua không quá quan trọng. Nó phản ánh độ dài tối đa của tham số như được xác định trong SQL Server chứ không phải độ dài của dữ liệu bạn đang truyền qua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đổi tên cột trả về lỗi

  2. Mối quan hệ 1-1 với khóa chính khác nhau trong mã EF 6.1 Đầu tiên

  3. TSQL - tạo một proc được lưu trữ bên trong một báo cáo giao dịch

  4. Làm thế nào để thực hiện trực tiếp truy vấn SQL trong C #?

  5. Kích hoạt lịch sử bảng trong SQL Server?