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

तालिका-मूल्यवान पैरामीटर को पैरामीटरयुक्त SQL कथन में पास करते समय 'स्केलर वैरिएबल घोषित करना चाहिए' त्रुटि

सबसे पहले चीज़ें:मुझे नहीं पता कि आपको tableName कहां मिल रहा है? और columnName , लेकिन अगर वे उपयोगकर्ता द्वारा आपूर्ति की जाती हैं, तो यह SQL इंजेक्शन के लिए खुला है। कम से कम, QUOTENAME() का उपयोग करें यह सुनिश्चित करने के लिए कि कोई वास्तविक कोड इंजेक्ट नहीं किया गया है।

दूसरे, आप वास्तव में TVP का उपयोग नहीं कर रहे हैं। आपके पास जो कोड है वह सिर्फ IN (@IDTable) . कह रहा है ऐसा नहीं है कि आप टीवीपी का उपयोग कैसे करते हैं।

टीवीपी सिर्फ एक टेबल वेरिएबल है, और इसे किसी भी अन्य टेबल की तरह इस्तेमाल किया जाना चाहिए:

protected virtual void DoDeleteRecords(List<Guid> ids)
{   
    if (ids.Count == 0)
        return;
    DataTable tvp = new DataTable();
    tvp.Columns.Add("Id", typeof(Guid));

    foreach (Guid id in ids)
        tvp.Rows.Add(id);

    const string sql = @"
DELETE FROM table
WHERE idColumnName IN (SELECT * FROM @IDTable);
";

    using(SqlConnection connection = new SqlConnection(CoreSettings.ConnectionString))
    using(SqlCommand command = new SqlCommand(sql, connection))
    {
        command.Parameters.Add(
            new SqlParameter("@IDTable", SqlDbType.Structured)
        {
            Value = tvp,
            Direction = ParameterDirection.Input,
            TypeName = "dbo.IDList"
        });

        connection.Open();
        command.ExecuteNonQuery();
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जब IDENTITY_INSERT को OFF पर सेट किया जाता है, तो SQL तालिका 'तालिका' में पहचान कॉलम के लिए स्पष्ट मान सम्मिलित नहीं कर सकता है

  2. varchar मान 'मेरा लौटा हुआ मान' को डेटा प्रकार int . में कनवर्ट करते समय रूपांतरण विफल रहा

  3. SQL सर्वर प्रबंधन स्टूडियो (SSMS) में रंग और फ़ॉन्ट कैसे बदलें - SQL सर्वर / TSQL ट्यूटोरियल भाग 12

  4. पैरामीटर्स के साथ उपयोग किए जाने पर OR क्लॉज के उपयोग का अनुकूलन कैसे करें (SQL Server 2008)

  5. SQL तालिका को क्वेरी कैसे करें और परिणाम सेट से डुप्लिकेट पंक्तियों को कैसे निकालें