Для SQL Server 2008 можно использовать табличный параметр . Это - немного работы, но это возможно более чисто, чем мой другой метод .
Первый, необходимо создать тип
CREATE TYPE dbo.TagNamesTableType AS TABLE ( Name nvarchar(50) )
Затем код ADO.NET похож на это:
string[] tags = new string[] { "ruby", "rails", "scruffy", "rubyonrails" };
cmd.CommandText = "SELECT Tags.* FROM Tags JOIN @tagNames as P ON Tags.Name = P.Name";
// value must be IEnumerable
cmd.Parameters.AddWithValue("@tagNames", tags.AsSqlDataRecord("Name")).SqlDbType = SqlDbType.Structured;
cmd.Parameters["@tagNames"].TypeName = "dbo.TagNamesTableType";
// Extension method for converting IEnumerable to IEnumerable
public static IEnumerable AsSqlDataRecord(this IEnumerable values, string columnName) {
if (values == null || !values.Any()) return null; // Annoying, but SqlClient wants null instead of 0 rows
var firstRecord = values.First();
var metadata = SqlMetaData.InferFromValue(firstRecord, columnName);
return values.Select(v =>
{
var r = new SqlDataRecord(metadata);
r.SetValues(v);
return r;
});
}
Comeau C ++ может "компилировать" C ++ в C. Это похоже на вашу цель, так как OpenCL не поддерживает C ++ - он намного ближе к C.
Такого инструмента нет - шаблоны являются частью языка, а не какой-то предварительной обработкой - они обрабатываются компилятором, как и другой код.