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.