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

एंटिटी फ्रेमवर्क के माध्यम से SQL सर्वर संग्रहीत कार्यविधि में तालिका मान प्रकार पास करें

मान लें कि आप GUID के एकल कॉलम वाली तालिका भेजना चाहते हैं।

सबसे पहले हमें SqlMetaData जो टेबल (कॉलम) के स्कीमा को दर्शाता है।

नीचे दिया गया कोड दर्शाता है कि GUID का "Id" नामक एक कॉलम SQL संग्रहीत कार्यविधि पैरामीटर तालिका प्रकार है

var tableSchema = new List<SqlMetaData>(1)
{
  new SqlMetaData("Id", SqlDbType.UniqueIdentifier)
}.ToArray();

इसके बाद आप SqlDataRecord

नीचे दिया गया कोड दर्शाता है कि ऊपर बनाए गए स्कीमा का उपयोग करके सूची के अंदर आइटम कैसे जोड़ें। सूची में प्रत्येक आइटम के लिए एक नया SqlDataRecord बनाएँ। SetGuid को संबंधित प्रकार से बदलें और Guid.NewGuid() को संबंधित मान के रूप में बदलें। प्रत्येक आइटम के लिए नया SqlDataRecord दोहराएं और उन्हें सूची में जोड़ें

var tableRow = new SqlDataRecord(tableSchema);
tableRow.SetGuid(0, Guid.NewGuid());
var table = new List<SqlDataRecord>(1)
{
  tableRow
};

फिर SqlParameter बनाएं। :

var parameter = new SqlParameter();
parameter.SqlDbType = SqlDbType.Structured;
parameter.ParameterName = "@UserIds"; //@UserIds is the stored procedure parameter name
parameter.TypeName = "{Your stored procedure type name}"
parameter.Value = table;

var parameters = new SqlParameter[1]
{
  parameter
};

फिर बस डेटाबेस का उपयोग करके संग्रहीत कार्यविधि को कॉल करें। .SqlQuery

IEnumerable<ReturnType> result;
using (var myContext = new DbContext())
{
  result = myContext.Database.SqlQuery<User>("GetUsers @UserIds", parameters)
    .ToList();         // calls the stored procedure
    // ToListAsync();  // Async
{

SQL सर्वर में, अपना उपयोगकर्ता-परिभाषित तालिका प्रकार बनाएं (मैं उन्हें TTV, तालिका टाइप किए गए मान के साथ प्रत्ययित करता हूं):

CREATE TYPE [dbo].[UniqueidentifiersTTV] AS TABLE(
  [Id] [uniqueidentifier] NOT NULL
)
GO

फिर प्रकार को एक पैरामीटर के रूप में निर्दिष्ट करें (मत भूलना, तालिका प्रकार मान केवल पढ़ने के लिए होना चाहिए!):

CREATE PROCEDURE [dbo].[GetUsers] (
  @UserIds [UniqueidentifiersTTV] READONLY
) AS
BEGIN
  SET NOCOUNT ON

  SELECT u.* -- Just an example :P
  FROM [dbo].[Users] u
  INNER JOIN @UserIds ids On u.Id = ids.Id
END


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में सर्कुलर संदर्भों का पता लगाना

  2. SQL सर्वर 2012 के लिए प्रदर्शन-संबंधी फ़िक्सेस

  3. C# AsyncCTP से ExecuteReaderAsync का उपयोग करने का कोई नुकसान

  4. एमएस एसक्यूएल सर्वर 2017 मानक में विफलता लागू करना

  5. SQL सर्वर लॉक एस्केलेशन