sql >> Databáze >  >> RDS >> Sqlserver

Jak předat NULL nebo prázdné řetězce vstupnímu parametru uložené procedury s ADO a VB?

Rychlý test zde ukazuje, že NULL by měla fungovat. Ukázkový kód, který jsem použil k testování (na jednoduchém formuláři s jedním tlačítkem a jedním textovým polem):

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

A nazval tento uložený 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 vrátil 'NULL' pro použití hodnoty VB Null (jak je uvedeno výše) a 'NOT NULL' pro vbNull . Pokud Null nefunguje vám, pak se nemohu vyjádřit k tomu, co by mohlo být špatně...!

Podobně by měly být předány prázdné řetězce – prázdný řetězec, tj. str = "" -- což způsobí, že usp_Bob vrátí 'EMPTY'. Cokoli jiného vrátí 'NOT NULL AND NOT EMPTY' (jak se očekávalo).

Pokud nemůžete předat hodnotu NULL, pak další možností je přetypovat prázdný řetězec na hodnotu NULL ve sproc -- tj.

IF @param = ''
    SET @param = NULL

Všimněte si, že délka, kterou projdete, by neměla příliš záležet. Je to odraz maximální délky parametru definovaného v SQL Server spíše než délky dat, kterými procházíte.



  1. Funkce rozdělení v SQL Server 2008

  2. Pomocí MySQL C API - kontrola úspěšnosti vkládání řádků pomocí připravených příkazů

  3. Jak vrátit levou nebo pravou část řetězce v MySQL

  4. Jak získat časové pásmo operačního systému z databáze Oracle ve formátu řetězce? (Převést/převést datum na ts s tz)