2011-10-21 4 views
15

से तालिकाओं को कैसे बाहर निकालना है मुझे पता है कि sp_msforeachtable सभी तालिकाओं पर क्वेरी करने की अनुमति देता है।sp_msforeachtable

मेरे पास 100 टेबल हैं और मैं 97 टेबल पर एक ही क्वेरी करना चाहता हूं। कुछ तालिकाओं को बाहर करने के EXEC sp_MSForEachTable "DELETE FROM ?"

क्या यह संभव है:

मैं इस क्वेरी का उपयोग कर रहा हूँ?

उत्तर

33
EXEC sp_MSforeachtable 'IF OBJECT_ID(''?'') NOT IN (
                ISNULL(OBJECT_ID(''[dbo].[T1]''),0), 
                ISNULL(OBJECT_ID(''[dbo].[T2]''),0) 
                ) 
         DELETE FROM ?' 
+0

+1 - मेरा उत्तर :) की बहुत अधिक सुरुचिपूर्ण संस्करण – JNK

4

sp_MSforeachtable गैर-दस्तावेजी प्रक्रिया है, लेकिन यह उदाहरण के द्वारा अनुसार: http://avinashkt.blogspot.ru/2008/05/useful-operations-with-spmsforeachtable.html आप तालिकाओं की सूची को सीमित करने के अतिरिक्त दूसरा पैरामीटर @whereand प्रदान कर सकता है।


यह प्रश्न जो संलग्न है, वह निम्न है।

SELECT '[' + REPLACE(schema_name(syso.schema_id), N']', N']]') + ']' 
     + '.' 
     + '[' + REPLACE(object_name(o.id), N']', N']]') + ']' 
FROM dbo.sysobjects o 
     JOIN sys.all_objects syso 
     ON o.id = syso.object_id 
WHERE OBJECTPROPERTY(o.id, N'IsUserTable') = 1 
     AND o.category & ltrim(str(CONVERT(INT, 0x0002))) = 0 

इसलिए उदाहरण वाक्य रचना

EXEC sp_MSforeachtable @command1 = N'PRINT ''?'' ', 
          @whereand = 'AND o.id NOT IN (
                ISNULL(OBJECT_ID(''[dbo].[T1]''),0), 
                ISNULL(OBJECT_ID(''[dbo].[T2]''),0) 
                 )' 
+0

+1 मैंने अधिक जानकारी और एक उदाहरण जोड़ा। –

2

सरल वाक्य रचना मैं शामिल करने या स्कीमा और तालिकाओं को बाहर करने में आए होगा:

exec sp_MSforeachtable 'print ''?''', 
@whereand='and Schema_Id=Schema_id(''Value'') and o.Name like ''%Value%'''