SQL Server ユーザー定義関数(1) インラインテーブル値関数

ユーザー定義関数 その1

— =============================================
— インラインテーブル値関数
— RETURN句のカッコ内にはSELECT文を1つだけ書ける
— 注意:SELECT * を使うと,その後テーブルに追加された列の情報は返らない.
— (ALTERで関数を定義し直せば大丈夫だが,*は使わない方がいいだろう.)
— =============================================

CREATE FUNCTION fn_Test1
(   
    @a1 int
)
RETURNS TABLE
AS
RETURN
(
    SELECT b1, b2
        FROM Table1
        WHERE ID = @a1
)
GO


使い方

SELECT * FROM fn_Test1(1) –カッコの中にパラメーター値を入れる

次のようにUPDATE文を使うと,元のTable1の内容が書き換わる.
間違ってそのままテーブル変数や一時テーブルのように使うと痛い目を見る.

UPDATE fn_Test1(1) SET b1 = 1

参考:
ユーザー定義関数 (MSDN)

VB2005 + SQL ストアドでのパラメーター受け渡し

ストアドでのパラメーター受け渡し

Dim cn As SqlClient.SqlConnection

Sub a()

    Dim cmd As New SqlClient.SqlCommand
   
Try

        Dim strSQL As String = “stTest”
        cmd.Connection = cn
        cmd.CommandText = strSQL
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Clear()
        ‘Return Value
        cmd.Parameters.Add(“@Ret”, SqlDbType.Int).Direction = ParameterDirection.ReturnValue
        ‘入力パラメーター Input Parameters
        cmd.Parameters.Add(“@ID”, SqlDbType.Int).Value = 1
        cmd.Parameters.Add(“@a1”, SqlDbType.NVarChar).Value = “A”
        cmd.Parameters.Add(“@a2”, SqlDbType.Decimal).Value = 1.52D
        ‘出力パラメーター Output Parameters
        cmd.Parameters.Add(“@b1”, SqlDbType.Int).Direction = ParameterDirection.Output
        ‘Decimal型の出力パラメーターはPrecision(最大桁数)とScale(小数部桁数)の指定が必要.欄外の※も参照.
        cmd.Parameters.Add(“@b2”, SqlDbType.Decimal).Direction = ParameterDirection.Output
        cmd.Parameters(“@b2”).Precision = 4
        cmd.Parameters(“@b2”).Scale = 2

        Dim res As Integer = cmd.ExecuteNonQuery() ‘ストアド実行

        If CInt(cmd.Parameters(“@Ret”).Value) = 1 Then
            If Not IsDBNull(cmd.Parameters(“@b1”).Value) Then
                Dim b1 As Integer = CInt(cmd.Parameters(“@b1”).Value)
                ‘コード
            End If
        End If

    Finally
        cmd.Dispose()
    End Try
End Sub


Updated:
2010-10-23 Decimal型の例を追加.
※ Decimal型のPrecision(最大桁数)とScale(小数部桁数)の指定は入力パラメーターでは不要だが出力パラメーターでは必要.
ややこしいことに,Excel VBAでは,入力パラメーター・出力パラメーターどちらにも必要.