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

OUTER APPLY ブロックでストアド プロシージャを実行する

    ストアド プロシージャは、データの選択以外の操作を実行したり、データを返さなくても機能したり、さまざまなシナリオでさまざまなセットを返したりできるため、そのような用途向けには設計されていません。

    ストアド プロシージャとは異なり、関数は他のクエリとインラインで使用するのに最適です。

    2 つのオプションがあります:

    A) TeacherID のみを返すスカラー関数を作成する WHERE で使用します

    CREATE FUNCTION udfGetTeacherID
    (
        @lessonId int, @groupId int
    )
    RETURNS int
    AS
    BEGIN
    
        DECLARE @teacherId INT;
    
        SELECT @teacherId = GroupTeachers.TeacherId
        FROM GroupTeachers
        WHERE [email protected] AND [email protected];
    
    
        RETURN @teacherId;
    
    END
    GO
    

    B) 必要なすべてのデータを取得できるテーブル値関数を作成し、それに結合 (適用) するだけです。

    CREATE FUNCTION udfGetTeacherName
    (
        @lessonId int, @groupId int
    )
    RETURNS TABLE 
    AS
    RETURN 
    (
        SELECT t.TeacherLastName, t.TeacherFirstName, t.TeacherMiddleName
        FROM Teachers t
        INNER JOIN GroupTeachers g ON  T.TeacherID = g.TeacherID
        WHERE [email protected] AND [email protected]
    )
    GO
    

    ここにいくつかの読み物があります:SQL Server のストアド プロシージャと関数の違い




    1. 来週のMicrosoftMVPサミット中にTwitterでフォローしてください

    2. CDbCommand ::fetchColumn()が失敗しました:SQLSTATE [HY000]:一般エラー:2014他のバッファリングされていないクエリがアクティブな間はクエリを実行できません

    3. MySQLまたはMariaDBサーバーの本番環境への準備-パート2-

    4. TypeError:nullのメソッド'query'を呼び出せません-Herokunode.jsでpg.connectを呼び出す場合