1

.netフレームワークを使用してC#でインラインで記述されたSQLクエリがたくさんあります。例えば

string sMysql = @"
SELECT
[Something]
from Person where person_uid=12"

TransactSQLで記述されるストアドプロシージャに変換してほしい。

このようなもの:

CREATE PROCEDURE [dbo].[aspnet_AnyDataInTables]
    @uid int
AS
BEGIN
SELECT
    [Something]
    from Person where person_uid=@uid
END

手動で行うことはできますが、変換するインラインクエリがたくさんあります。この多忙な仕事をプログラムで行う方法はありますか?

4

1 に答える 1

1

特定の例では、ストアド プロシージャのアイデアを破棄し、コード スニペットを次のように変更します。

// initialize UID value and SQL query with parameter placeholder
int uid = 12;
sql = "SELECT [Something] FROM [Person] WHERE [person_uid] = @UID";

// initialize connection and open
using (SqlConnection connection = new SqlConnection("<connection string>")
{     
    SqlCommand command = new SqlCommand(sql, connection)
    // add UID parameter
    command.Parameters.Add(new SqlParameter("UID", uid);

    try
    {
        connection.Open();        
        // execute and read results
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            // process results        
        }
    }
    catch (Exception ex)
    {
        // handle exceptions
    }
}

質問のコメントで述べたように、ストアド プロシージャはインライン パラメーター化されたクエリよりも必ずしも高速ではありません。SQL Server は、パラメーター化されていないクエリの実行プランもキャッシュしますが、私はパラメーターの明示的な宣言を好みます。

詳細については、SQL Server 2008 の実行計画のキャッシュと再利用に関するこの記事を参照してください。

于 2013-02-11T16:18:02.420 に答える