मैं नमूना उद्देश्यों के लिए आपके मूल SQL में संशोधन का उपयोग कर रहा हूँ।
DECLARE @list AS TABLE (Name VARCHAR(20));
INSERT INTO @list(Name)
VALUES ('PROCEDURE'),
('FUNCTION');
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE in (SELECT Name from @list)
आप तालिका-मूल्यवान पैरामीटर का उपयोग कर सकते हैं
यहां एक संशोधित उदाहरण SQL Server 2008 (ADO. नेट)
using (SqlConnection cnn = new SqlConnection("Your connection string"))
{
var tableParam = new DataTable("names");
tableParam.Columns.Add("Name", typeof(string));
tableParam.Rows.Add(new object[] { "PROCEDURE" });
tableParam.Rows.Add(new object[] { "FUNCTION')" });
var sql = @"DECLARE @list AS TABLE (Name VARCHAR(20))
INSERT INTO @list(Name)
SELECT Name from @Names;
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE in (SELECT Name from @list)";
var sqlCmd = new SqlCommand(sql, cnn);
var tvpParam = sqlCmd.Parameters.AddWithValue("@Names", tableParam);
tvpParam.SqlDbType = SqlDbType.Structured;
tvpParam.TypeName = "dbo.Names";
cnn.Open();
using(SqlDataReader rdr = sqlCmd.ExecuteReader() )
{
while (rdr.Read())
Console.WriteLine(rdr["SPECIFIC_NAME"]);
}
}
लेकिन इसके काम करने से पहले आपको dbo.Names प्रकार को परिभाषित करना होगा
यहाँ प्रकार निर्माण SQL है
CREATE TYPE dbo.Names AS TABLE
( Name VARCHAR(Max));
एक अन्य विकल्प XML पैरामीटर का उपयोग करना है
using (SqlConnection cnn = new SqlConnection("Your connection string"))
{
var sql = @"DECLARE @list AS TABLE (Name VARCHAR(20))
INSERT INTO @list(Name)
SELECT t.name.value('.', 'varchar(MAX)')
FROM @Names.nodes('/Names/Name') as T(Name);
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE in (SELECT Name from @list)";
var sqlCmd = new SqlCommand(sql, cnn);
var s = new MemoryStream(ASCIIEncoding.Default.GetBytes("<Names><Name>PROCEDURE</Name><Name>FUNCTION</Name></Names>"));
var xmlParam = new SqlXml(s);
sqlCmd.Parameters.AddWithValue("@Names", xmlParam);
cnn.Open();
using(SqlDataReader rdr = sqlCmd.ExecuteReader() )
{
while (rdr.Read())
Console.WriteLine(rdr["SPECIFIC_NAME"]);
}
}