sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan sendes NULL eller tomme strenge til lagret procedure input parameter med ADO og VB?

En hurtig test her viser, at NULL burde gøre jobbet. Eksempelkode, jeg plejede at teste (på en simpel formular med én knap og én tekstboks):

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

Og den kaldte denne lagrede proc:

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 returnerede 'NULL' for at bruge VB-værdien Null (som i eksemplet ovenfor), og 'NOT NULL' for vbNull . Hvis Null virker ikke for dig, så kan jeg ikke udtale mig om, hvad der kan være galt...!

På samme måde skal tomme strenge sendes lige som det -- en tom streng, dvs. str = "" -- hvilket får usp_Bob til at returnere 'EMPTY'. Alt andet har det returnere 'NOT NULL AND NOT EMPTY' (som forventet).

Hvis du ikke kan få NULL passeret igennem, så er en anden mulighed at caste en tom streng til NULL i sproc -- dvs.

IF @param = ''
    SET @param = NULL

Bemærk, at længden du passerer igennem ikke bør betyde for meget. Det er en afspejling af den maksimale længde af parameteren som defineret i SQL Server snarere end længden af ​​de data, du passerer igennem.



  1. Komplet vejledning til at rette SQL-databasefejl 5243

  2. Udfyld null-værdier med sidste ikke-null-beløb - Oracle SQL

  3. MySQL Zend Framework - SQLSTATE[42000]:Syntaksfejl eller adgangsovertrædelse:1064

  4. Hvad er forskellen mellem visninger og materialiserede visninger i Oracle?