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

रीडायरेक्ट चेन की शुरुआत और अंत का पता लगाएं

सामान्य समाधान खोजते हुए पाया जा सकता है:"निर्देशित एसाइक्लिक ग्राफ", "ट्रैवर्सल", "एसक्यूएल"। hansolav.net/sql/graphs.html#topologicalsorting कुछ अच्छी जानकारी है।

यदि आपको एक तेज़ उत्तर की आवश्यकता है, तो यहां एक त्वरित और गंदी विधि है। यह कुशल नहीं है, और इसे एक चक्रीय इनपुट की आवश्यकता है, लेकिन यह किसी ऐसे व्यक्ति के लिए पठनीय है जो sql से परिचित नहीं है।

SELECT id, FromUrl, ToUrl
INTO #temp
FROM dbo.redirect

WHILE @@ROWCOUNT > 0
BEGIN
  UPDATE cur
  SET ToUrl = nxt.ToURL
  FROM #temp cur
  INNER JOIN #temp nxt ON (cur.ToURL = nxt.FromURL)
END

SELECT * FROM #temp

वैकल्पिक रूप से, पुनरावर्ती CTE के साथ:

;WITH cte AS (
  SELECT 1 as redirect_count, id, FromURL, ToUrl
  FROM dbo.redirect
  UNION ALL
  SELECT redirect_count + 1, cur.id, cur.FromURL, nxt.ToURL
  FROM cte cur
  INNER JOIN @t nxt ON (cur.ToURL = nxt.FromURL)
)
SELECT
  t1.id, t2.FromUrl, t2.ToUrl
FROM dbo.redirect t1
CROSS APPLY (
  SELECT TOP 1 FromUrl, ToUrl
  FROM cte
  WHERE id = t1.id
  ORDER BY redirect_count DESC
) t2



  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 टेबल की तुलना करें

  2. वीएसटीएस का उपयोग करके एसएसआईएस पैकेज बनाएं और तैनात करें

  3. WMI इवेंट त्रुटि का उपयोग कर SQL सर्वर अलर्ट

  4. एसक्यूएल 2008 में एक्सएमएल कॉलम से डेटा कैसे निकालें?

  5. एंटिटी फ्रेमवर्क के साथ संग्रहित प्रक्रिया से डेटा प्राप्त करना