sql >> データベース >  >> RDS >> Sqlserver

ADOとVBでNULLまたは空の文字列をストアドプロシージャの入力パラメータに渡す方法は?

    ここでの簡単なテストは、NULL が仕事をするべきであることを示しています。テストに使用したサンプル コード (1 つのボタンと 1 つのテキスト ボックスを持つ単純なフォーム):

    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 は、VB 値 Null を使用するために 'NULL' を返しました (上記のサンプルのように)、および vbNull の場合は 'NOT NULL' . Null の場合 うまくいかない場合は、何が問題なのかコメントできません...!

    同様に、空の文字列はそのまま渡す必要があります -- 空の文字列、つまり str = "" -- これにより、usp_Bob は「EMPTY」を返します。それ以外の場合は、'NOT NULL AND NOT EMPTY' が返されます (予想どおり)。

    NULL を渡すことができない場合は、sproc で空の文字列を NULL にキャストするという別のオプションがあります -- つまり、

    IF @param = ''
        SET @param = NULL
    

    通過する長さはあまり重要ではないことに注意してください。これは、通過するデータの長さではなく、SQL Server で定義されているパラメータの最大長を反映しています。



    1. NULL値をテーブルの最後にソートします

    2. PHPとPDO:IPv6アドレスを使用してMySQLに接続する

    3. エンティティ-属性-値テーブルの設計

    4. SQL Server:スキーマを許可する方法は?