列リストとテーブル名をパラメーターにすることはできません。ただし、これを C# から実行しているため、技術的には既に動的 SQL を使用しています (これらのパラメーターを使用してストアド プロシージャを呼び出している場合を除きますが、使用されているストアド プロシージャについてはここでは言及されていないため、今のところ使用しないと仮定します)。C# で SQL を作成する場合、列リストとテーブル名をクエリに連結する必要がありますが、TOP() 演算子で使用される値にパラメーターを使用することもできます。
SqlConnection _Connection = new SqlConnection("connection string");
SqlCommand _Command = new SqlCommand();
SqlDataReader _Reader = null;
string _Query;
string _TableName = "dbo.MyTable";
string _ColumnList = "Field1, Field2 AS [AliasedName], Field3";
int _NumberOfRows = 12;
_Query = String.Concat("SELECT TOP (@NumberOfRows) ",
_ColumnList, " FROM ", _TableName);
SqlParameter _NumRows = new SqlParameter("@NumberOfRows", SqlDbType.Int);
_NumRows.Value = _NumberOfRows;
try
{
_Connection.Open();
_Reader = _Command.ExecuteReader();
// do stuff
}
finally
{
_Reader.Close();
_Connection.Close();
}
もちろん、@NumberOfRows 値をクエリに直接連結することもできますが、パラメーターとして保持すると、ColumnList と TableName に同じ値を使用してこのクエリを複数回実行し、 @NumberOfRows 値。