Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

ADO.NET का उपयोग करके इस SQL ​​​​क्वेरी को कैसे निष्पादित करें?

मैं नमूना उद्देश्यों के लिए आपके मूल 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"]);                    

    }



}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlCommand का उपयोग करने के पेशेवरों और विपक्ष सी # में तैयार करें?

  2. SQL सर्वर में DROP टेबल स्टेटमेंट को समझना

  3. SQL सर्वर क्वेरी डेटा प्रकार, नल नहीं, और प्राथमिक कुंजी बाधाओं के साथ तालिका में कॉलम की सूची प्राप्त करने के लिए

  4. क्या हमारे पास एक विदेशी कुंजी हो सकती है जो किसी अन्य तालिका में प्राथमिक कुंजी नहीं है?

  5. Sql चयन समूह द्वारा और स्ट्रिंग concat