Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да предам NULL или празни низове към параметъра за въвеждане на съхранена процедура с ADO и VB?

Бърз тест тук показва, че NULL трябва да свърши работа. Примерен код, който използвах за тестване (върху прост формуляр с един бутон и едно текстово поле):

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

И извика тази съхранена процедура:

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 върна 'NULL' за използване на VB стойността Null (съгласно примера по-горе) и 'NOT NULL' за vbNull . Ако Null не работи за вас, тогава не мога да коментирам какво може да не е наред...!

По същия начин празните низове трябва да се предават точно така -- празен низ, т.е. str = "" -- което кара usp_Bob да връща „ПРАЗЕН“. Всичко друго връща 'NOT NULL AND NOT EMPTY' (както се очаква).

Ако не можете да преминете през NULL, тогава друга опция е да прехвърлите празен низ към NULL в sproc -- т.е.

IF @param = ''
    SET @param = NULL

Имайте предвид, че дължината, през която преминавате, не трябва да има голямо значение. Това е отражение на максималната дължина на параметъра, както е дефиниран в SQL Server, а не на дължината на данните, през които преминавате.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Обединение на многоъгълници

  2. Помощ за SQL Query след 13-ти ред Динамични и в 12-ти ред статични стойности с формула

  3. 'PDOException' със съобщение 'SQLSTATE[22001]:Данни низове, съкратено вдясно:0

  4. SQL Server - От географска дължина и ширина до геометричен тип данни

  5. Преобразувайте ISO форматирана дата в DATETIME