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

SQL सर्वर sp_msforeachtable उपयोग केवल उन तालिकाओं का चयन करने के लिए जो कुछ शर्तों को पूरा करती हैं

आप जानते हैं कि कैसे sp_MSforeachtable अनिर्दिष्ट है, और किसी भी समय दूर जा सकता है/संशोधित किया जा सकता है?

ठीक है, अगर आप इसे अनदेखा करने में प्रसन्न हैं, तो इसका एक और पैरामीटर है जिसे @whereand . कहा जाता है , जो WHERE . में संलग्न है आंतरिक क्वेरी का खंड जिसका उपयोग तालिकाओं को खोजने के लिए किया जा रहा है (और एक AND . से शुरू होना चाहिए )।

आपको यह भी जानना होगा कि एक उपनाम है, o sysobjects . के विरुद्ध , और दूसरा उपनाम syso sys.all_objects . के विरुद्ध ।

इस ज्ञान का उपयोग करके, आप अपना @whereand तैयार कर सकते हैं पैरामीटर के रूप में:

EXEC sp_MSforeachtable 
@command1='...',
@whereand='AND o.id in (select object_id from sys.columns c where c.name=''EMP_CODE'')'

अब आप अपने command1 . को भी सरल बना सकते हैं , चूंकि आप जानते हैं कि इसे केवल EMP_CODE . वाली तालिकाओं के विरुद्ध चलाया जाएगा कॉलम। मैं शायद COUNT(*) . निकाल दूंगा हालत भी, क्योंकि मैं नहीं देखता कि यह क्या मूल्य जोड़ रहा है।

आपके आगे के काम के आधार पर अपडेट किया गया, और एक टेबल पर परीक्षण किया गया:

DECLARE @EMPCODE AS VARCHAR(20)
SET @EMPCODE='HO081'
declare @sql nvarchar(2000)
set @sql = '
    DECLARE @COUNT AS INT
    SELECT @COUNT=COUNT(*) FROM ? WHERE EMP_CODE='''[email protected]+'''
    IF @COUNT>0
    BEGIN
        PRINT PARSENAME("?",1)+'' => ''+CONVERT(VARCHAR,@COUNT)+'' ROW(S)''
        --PRINT ''DELETE FROM ''+PARSENAME("?",1)+'' WHERE EMP_CODE='''''[email protected]+'''''''
    END
'
EXEC sp_MSforeachtable 
@[email protected],@whereand='AND O.ID IN (SELECT OBJECT_ID FROM SYS.COLUMNS C WHERE C.NAME=''EMP_CODE'')'

(मैंने @whereand को वापस कर दिया है EMP_CODE . के लिए क्वेरी करने के लिए , चूंकि आप वहां मान को बदलना नहीं चाहते हैं)।

मुद्दा यह है कि, आप पैरामीटर . पास कर सकते हैं एक संग्रहीत कार्यविधि में, या शाब्दिक , लेकिन आप उनके बीच गणना/संयोजन क्रिया नहीं कर सकते हैं - इसलिए मैंने 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. SQL सर्वर में लेफ्ट पैडिंग – 3 LPAD () समकक्ष

  2. क्या मुझे SQL सर्वर में थोड़ा सा फ़ील्ड इंडेक्स करना चाहिए?

  3. SQL सर्वर में फ्लोट से वर्चर तक कास्टिंग क्यों किया जा रहा है?

  4. एक सूची से SqlBulkCopy<>

  5. SQL सर्वर में सांख्यिकी प्रोफ़ाइल क्या है?