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

गतिशील क्वेरी के लिए पैरामीटर के रूप में एसक्यूएल संग्रहीत कार्यविधि तर्क

यहाँ एक अधिक सुरक्षित विकल्प है:

ALTER PROCEDURE dbo.queryfunctions 
  @Tabname NVARCHAR(511),
  @colname NVARCHAR(128),
  @valuesname VARCHAR(150)
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = 'SELECT * FROM ' + @Tabname 
           + ' WHERE ' + QUOTENAME(@colname) + ' = @v';

  EXEC sp_executesql @sql, N'@v VARCHAR(150)', @valuesname;
END
GO

EXEC dbo.queryfunctions N'dbo.education', N'eduChildName', 'Revathi';

मैंने क्या बदला?

  1. हमेशा dbo का उपयोग करें वस्तुओं को बनाते/संदर्भित करते समय उपसर्ग।
  2. टेबल और कॉलम नाम NVARCHAR हैं और कर सकते हैं 150 वर्णों से अधिक लंबा हो। भविष्य में किसी व्यक्ति द्वारा जोड़ी जा सकने वाली तालिका को समायोजित करने की अनुमति देने के लिए अधिक सुरक्षित है।
  3. जोड़ा गया SET NOCOUNT ON नेटवर्क ओवरहेड के खिलाफ एक गार्ड के रूप में और संभावित रूप से क्लाइंट को गलत परिणाम सेट भेजना।
  4. @sql हमेशा NVARCHAR होना चाहिए ।
  5. QUOTENAME का उपयोग करें एसक्यूएल इंजेक्शन को विफल करने में मदद करने के लिए टेबल या कॉलम जैसे इकाई नामों के आसपास और खराब चुने गए नामों (जैसे कीवर्ड) से बचाव के लिए।
  6. जहां संभव हो उचित पैरामीटर का उपयोग करें (फिर से SQL इंजेक्शन को विफल करने में मदद करने के लिए लेकिन स्ट्रिंग मापदंडों पर सभी प्रकार के सीमांकक से बचने के लिए)।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. किसी दृश्य में प्रयुक्त उपनाम का वास्तविक स्तंभ नाम ज्ञात कीजिए?

  2. T-SQL (sp_tables) का उपयोग करके SQL सर्वर में तालिकाओं और दृश्यों की सूची लौटाएं

  3. SQL सर्वर (T-SQL) में किसी दिनांक से ISO सप्ताह संख्या लौटाएँ

  4. SQL सर्वर कंप्यूटेड कॉलम EntityFramework में कैसे काम करते हैं?

  5. SQL अपडेट ट्रिगर तभी होता है जब कॉलम संशोधित होता है