sql >> Databasteknik >  >> RDS >> Sqlserver

Hur skickar man NULL eller tomma strängar till indataparameter för lagrad procedur med ADO och VB?

Ett snabbt test här visar att det är NULL borde göra jobbet. Exempelkod jag brukade testa (på ett enkelt formulär med en knapp och en textruta):

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

Och den kallade denna lagrade 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 returnerade 'NULL' för att använda VB-värdet Null (enligt exemplet ovan), och 'NOT NULL' för vbNull . Om Null fungerar inte för dig, då kan jag inte kommentera vad som kan vara fel...!

På samma sätt ska tomma strängar skickas precis som det -- en tom sträng, dvs. str = "" -- vilket gör att usp_Bob returnerar 'EMPTY'. Allt annat får det att returnera 'NOT NULL AND NOT EMPTY' (som förväntat).

Om du inte kan få NULL passerat, då är ett annat alternativ att kasta en tom sträng till NULL i sproc -- dvs.

IF @param = ''
    SET @param = NULL

Observera att längden du passerar inte bör spela så stor roll. Det är en återspegling av den maximala längden på parametern enligt definitionen i SQL Server snarare än längden på den data du passerar igenom.



  1. Sammankopplingsproblem

  2. oracle sql if condition, välj sedan statement1 annars välj statement2

  3. Flera sätt att infoga delade avgränsade strängar i en kolumn

  4. Architecting for Security:En guide för MySQL