Une seule colonne d'une procédure stockée

J'ai cette procédure stockée dans mon SQL Server;

CREATE PROC GetChild @Child_ID int AS SELECT * FROM Children WHERE Child_ID = @Child_ID 

J'appelle cette procédure stockée de C #.

Je voudrais savoir, s'il est possible d'appeler seulement une colonne de cette table au lieu de l'set de l'logging de C #.

En supposant que vous voulez dire returnner une colonne, si c'est ce que votre procédure stockée ressemble, alors non. Il returnnera toujours toutes les colonnes au client.

Vous pouvez simplement ignorer les colonnes renvoyées dont vous n'avez pas besoin. Vous pouvez également modifier la procédure stockée pour renvoyer uniquement une colonne. Mais tel quel, il les renvoie toujours tous.

Vous n'avez que trois choix.

  1. Réécrivez la procédure stockée pour simplement returnner les colonnes que vous voulez.

    Exemple: SELECT foo from Children Where Child_id = @Child_ID

  2. Utilisez un DataReader et obtenez simplement les colonnes que vous voulez

    Utiliser un lecteur directement

    while (reader.Read())

      `Console.WriteLine("{0}", reader.GetInt32(0));` 

    En utilisant les methods d'extension Linq qui vous permet de filterr et sortinger les résultats ainsi que d'get seulement les colonnes que vous voulez.

    var List = rdr.Cast<IDataRecord>() .Select(s => s.GetInt32(0)).ToList();

  3. Abandonnez la procédure stockée et écrivez les instructions Select sur la table. Voir la réponse de Pranay

écrivez juste ci-dessous la requête

 select columnname from Children where Child_ID = @Child_ID 

nom_colonne: nom de la colonne que vous souhaitez récupérer

Code pour vous

 SqlConnection mySqlConnection =new SqlConnection("server=(local)\\SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI;"); SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); mySqlCommand.CommandText ="select columnname from Children where Child_ID = @Child_ID"; mySqlCommand .Parameters.Add("@Child_ID", SqlDbType.Int); mySqlCommand .Parameters["@Child_ID"].Value = idvalue; mySqlConnection.Open(); SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader(CommandBehavior.SingleRow); while (mySqlDataReader.Read()){ Console.WriteLine("mySqlDataReader[\" columnname\"] = " + mySqlDataReader["columnname"]); } mySqlDataReader.Close(); mySqlConnection.Close(); 

Utilisez un SqlDataReader pour cela:

 SqlConnection DbConn = new SqlConnection(YourConnSsortingngHere); SqlCommand ExecStoredProc = new SqlCommand(); ExecStoredProc.CommandType = CommandType.StoredProcedure; ExecStoredProc.CommandText = "GetChild"; ExecStoredProc.Connection = DbConn; ExecStoredProc.Parameters.AddWithValue("@ChildID", YourChildId); using (DbConn) { DbConn.Open(); using (SqlDataReader sdr = ExecStoredProc.ExecuteReader()) { while(sdr.Read()) // reference your column name like this: // sdr.GetSsortingng(sdr.GetOrdinal("YourColumnName")); } } 

Vous pouvez referencer n'importe quelle colonne renvoyée par la méthode SqlDataReader.Read() . De même, si vous searchz une valeur entière:

 int someInt = sdr.GetInt32(sdr.GetOrdinal("YourColumnName")); 

À partir de ce thread ( Insérez les résultats d'une procédure stockée dans une table temporaire ), vous pouvez essayer OPENROWSET.

D'abord, configurez votre database,

 sp_configure 'Show Advanced Options', 1 GO RECONFIGURE GO sp_configure 'Ad Hoc Dissortingbuted Queries', 1 GO RECONFIGURE GO 

Ensuite, en fonction de votre connection:

 SELECT yourcolumnname FROM OPENROWSET( 'SQLNCLI', 'server=yourservername;database=yourdbname;uid=youruserid;pwd=youruserpwd', 'EXEC [GetChild] yourchildid' ) 

ou

 SELECT yourcolumnname FROM OPENROWSET( 'SQLNCLI', 'server=yourservername;database=yourdbname;Trusted_Connection=yes', 'EXEC [GetChild] yourchildid') 

Je n'utiliserais pas cette solution lors de la récupération d'une seule ligne. La performance serait vraiment mauvaise. Pour récupérer un grand nombre de lignes, cela devrait faire l'affaire.