sql >> Database >  >> RDS >> Sqlserver

Hoe NULL of lege strings doorgeven aan de opgeslagen procedure-invoerparameter met ADO en VB?

Een snelle test hier laat zien dat NULL het werk zou moeten doen. Voorbeeldcode die ik heb gebruikt om te testen (op een eenvoudig formulier met één knop en één tekstvak):

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

En het noemde dit opgeslagen proces:

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 heeft 'NULL' geretourneerd voor het gebruik van de VB-waarde Null (zoals in het bovenstaande voorbeeld), en 'NOT NULL' voor vbNull . Als Null werkt niet voor jou, dan kan ik geen commentaar geven op wat er mis zou kunnen zijn...!

Evenzo moeten lege tekenreeksen zo worden doorgegeven - een lege tekenreeks, d.w.z. str = "" -- waardoor usp_Bob 'EMPTY' retourneert. Voor al het andere wordt 'NIET NULL EN NIET LEEG' geretourneerd (zoals verwacht).

Als je NULL niet kunt laten passeren, dan is een andere optie om een ​​lege string naar NULL in de sproc te casten -- d.w.z.

IF @param = ''
    SET @param = NULL

Houd er rekening mee dat de lengte die u doorloopt niet zo veel uitmaakt. Het is een weerspiegeling van de maximale lengte van de parameter zoals gedefinieerd in SQL Server in plaats van de lengte van de gegevens die u doorgeeft.



  1. Wat is het standaard MySQL JOIN-gedrag, INNER of OUTER?

  2. Reeds aangevinkte selectievakjes in PHP bijwerken

  3. Een lijst met gekoppelde tabellen exporteren naar Excel vanuit Access 2016

  4. Hoe kan mysql sneller miljoenen records invoegen?