Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara melewatkan NULL atau string kosong ke parameter input prosedur tersimpan dengan ADO dan VB?

Tes cepat di sini menunjukkan bahwa NULL seharusnya melakukan pekerjaan itu. Contoh kode yang saya gunakan untuk menguji (ke formulir sederhana dengan satu tombol dan satu kotak teks):

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

Dan itu disebut proc tersimpan ini:

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 mengembalikan 'NULL' karena menggunakan nilai VB Null (sesuai contoh di atas), dan 'NOT NULL' untuk vbNull . Jika Null tidak bekerja untuk Anda, maka saya tidak bisa mengomentari apa yang mungkin salah...!

Demikian pula, string kosong harus diteruskan begitu saja -- string kosong, yaitu str = "" -- yang membuat usp_Bob mengembalikan 'KOSONG'. Ada lagi yang mengembalikan 'NOT NULL AND NOT EMPTY' (seperti yang diharapkan).

Jika Anda tidak dapat melewati NULL, maka opsi lain adalah melemparkan string kosong ke NULL di sproc -- yaitu,

IF @param = ''
    SET @param = NULL

Perhatikan bahwa panjang yang Anda lewati seharusnya tidak terlalu menjadi masalah. Ini merupakan cerminan dari panjang maksimum parameter seperti yang didefinisikan dalam SQL Server daripada panjang data yang Anda lewati.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbarui tabel SQL Server dengan data lokal

  2. Ubah 'smalldatetime' menjadi 'datetimeoffset' di SQL Server (Contoh T-SQL)

  3. Konversi multi-basis - menggunakan semua kombinasi untuk penyingkat URL

  4. Penyortiran Menu Rekursif SQL

  5. Kueri Pivot Dinamis tanpa menyimpan kueri sebagai String