2010-09-09 19 views
17

में किसी ऑब्जेक्ट के सभी संदर्भ खोजें I SQL सर्वर डेटाबेस में किसी ऑब्जेक्ट के सभी संदर्भ ढूंढने का प्रयास कर रहा हूं।किसी SQL सर्वर डेटाबेस

मैं जल्दी से कैसे खोज सकता हूं? एसक्यूएल सर्वर प्रबंधन स्टूडियो ऐसा प्रतीत नहीं होता है। मैं http://www.red-gate.com/products/SQL_Search/ का उपयोग करता हूं लेकिन मैं इसे "आधिकारिक" माइक्रोसॉफ्ट समाधान ढूंढना चाहता हूं। क्या यह किसी अन्य उत्पाद में है?

उदाहरण के लिए, जब मैं विजुअल स्टूडियो में सामूहिक खोज करता हूं, तो मैं सभी संग्रहीत प्रक्रियाओं में कुछ भी ढूंढने में सक्षम होना चाहता हूं।

या शायद मैं इसे सही तरीके से कोड नहीं कर रहा हूं?

कार्ल

उत्तर

0

मैं 'सरकारी माइक्रोसॉफ्ट' रास्ते से यकीन नहीं है, लेकिन मैं अतीत में SqlDigger का उपयोग किया है। यह बुरा नहीं है।

यदि आप इसे वीएस में करना चाहते हैं, तो आपको अपनी परियोजना में शामिल अपनी सभी प्रोसेस के टेक्स्ट की आवश्यकता होगी।

+0

यह लिंक मर चुका है। बहुत सारे स्थान इस उपकरण का डाउनलोड करते हैं, लेकिन मुझे कोई आधिकारिक नहीं दिखता है। मैं आमतौर पर केवल RedGate के मुफ्त SQL खोज प्लग-इन का उपयोग करता हूं (http://www.red-gate.com/products/sql-development/sql-search/)। – Brian

1

मैं इस क्वेरी का उपयोग सभी तालिकाओं (या पाठ) संग्रहित प्रक्रियाओं में देखने के लिए:

SELECT DISTINCT o.name, o.xtype 
FROM syscomments c 
INNER JOIN sysobjects o ON c.id=o.id 
WHERE c.TEXT LIKE '%tablename%' 
+2

इसके बजाय मेरा उत्तर देखें कि आपको 'SYS.SQL_MODULES' क्यों जांचना चाहिए। –

37

उपयोग:

select object_name(m.object_id), m.* 
    from sys.sql_modules m 
where m.definition like N'%name_of_object%' 

... क्योंकि SYSCOMMENTS और INFORMATION_SCHEMA.routines nvarchar है (4000) कॉलम। तो यदि स्थिति 3 9 8 9 में "name_of_object" का उपयोग किया जाता है, तो यह नहीं मिलेगा। SYSCOMMENTS में कई लाइनें हैं, लेकिन INFORMATION_SCHEMA.routines truncates।

+1

धन्यवाद ... हालांकि मेरी इच्छा है कि आपने मुझे कुछ हफ्ते पहले यह बताया होगा !!! – Martin

+0

@MArtin प्रश्न केवल 20 घंटे पहले पूछा गया था ... –

+0

sys.sql_modules SQL Server 2000 में उपलब्ध नहीं है। – DeanOC

-2

SQL 2000 में यहां एक क्वेरी है जो ऑब्जेक्ट परिभाषाओं के अंदर खोज कर सकती है, जो 2000 अक्षरों तक खोज स्ट्रिंग का समर्थन करती है। यह syscomments तालिका में भाग का उपयोग करता है।

SELECT O.name, O.xtype 
FROM sysobjects O 
WHERE EXISTS (
    SELECT * 
    FROM 
     (
     SELECT 
      Chunk = Substring(C1.text, T.Offset, 4000) 
       + Coalesce(Substring(C2.text, 1, T.AdditionalLength), '') 
     FROM 
      syscomments C1 
      CROSS JOIN (
       SELECT 1, 0 
       UNION ALL 
       SELECT 2001, 2000 
      ) T (Offset, AdditionalLength) 
      LEFT JOIN syscomments C2 
       ON C1.id = C2.id 
       AND C1.colid + 1 = C2.colid 
       AND T.Offset > 1 
     WHERE 
      O.id = C1.id 
    ) C 
    WHERE 
     Chunk LIKE '%search string%' 
); 
+0

इस उत्तर के बारे में क्या पसंद नहीं है!?!? – ErikE

0

SQL सर्वर प्रबंधन स्टूडियो में ऑब्जेक्ट एक्सप्लोरर में किसी ऑब्जेक्ट पर राइट क्लिक करते समय एक व्यू निर्भरता सुविधा होती है। क्या आप यही खोज रहे हैं?

+0

देखें निर्भरता आपको नहीं बताएगी कि एक वस्तु कहां है, उदाहरण के लिए। एक टेबल या दृश्य, डायनामिक एसक्यूएल में संदर्भित है। ओएमजी टट्टू द्वारा प्रदान की गई क्वेरी होगी। – DeanOC

1

यदि आप एसएसएमएस में कीबोर्ड शॉर्टकट के रूप में ओएमजी पोनीज़ एसक्यूएल का उपयोग करना चाहते हैं, तो अपने मास्टर डीबी में निम्नलिखित एसपी जोड़ें।

USE [master] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[SP_FindAllReferences] 
@targetText nvarchar(128) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    declare @origdb nvarchar(128) 
    select @origdb = db_name() 

    declare @sql nvarchar(1000) 

    set @sql = 'USE [' + @origdb +'];' 
    set @sql += 'select object_name(m.object_id), m.* ' 
    set @sql += 'from sys.sql_modules m where m.definition like N' + CHAR(39) + '%' + @targetText + '%' + CHAR(39) 

    exec (@sql) 

    SET NOCOUNT OFF; 
END 

तो फिर तुम सिर्फ अपने कीबोर्ड शॉर्टकट को dbo.SP_FindAllReferences जोड़ने की जरूरत है और फिर आप अपने सर्वर पर किसी भी डीबी के संदर्भ में इसका इस्तेमाल कर सकते हैं।

चीयर्स!

एनबी: आप SQL सर्वर 2005 का उपयोग कर रहे हैं, तो आप को बदलने के लिए

@sql += 

साथ

@sql = @sql + 
1

एक गैर-दस्तावेजी एसक्यूएल एसपी के उपयोग के साथ करना होगा: sp_msforeachdb

exec sp_msforeachdb ' 
USE [?]; 

--IF DB_NAME() NOT IN (''master'',''tempdb'',''model'',''msdb'') 
BEGIN 
DECLARE 
    @SearchStr varchar(100) 
    SET @SearchStr = ''%column_store_segments%''; 
SELECT DISTINCT 
    ''?'' as db_name, o.name 
    , (CASE upper(o.xtype) 
      WHEN ''C'' THEN ''CHECK constraint''   
      WHEN ''D'' THEN ''Default or DEFAULT constraint''      
      WHEN ''F'' THEN ''FOREIGN KEY constraint'' 
      WHEN ''L'' THEN ''Log''                 
      WHEN ''FN'' THEN ''Scalar function''   
      WHEN ''IF'' THEN ''Inline table-function'' 
      WHEN ''PK'' THEN ''PRIMARY KEY or UNIQUE constraint'' 
      WHEN ''P'' THEN ''Stored procedure''            
      WHEN ''R'' THEN ''Rule''      
      WHEN ''RF'' THEN ''Replication filter stored procedure''    
      WHEN ''S'' THEN ''System table''    
      WHEN ''TF'' THEN ''Table function'' 
      WHEN ''TR'' THEN ''Trigger''     
      WHEN ''U'' THEN ''User table''  
      WHEN ''V'' THEN ''View''      
      WHEN ''UQ'' THEN ''UNIQUE constraint (type is K)''     
      WHEN ''X'' THEN ''Extended stored procedure''       
     ELSE upper(o.xtype) END) Type 
    , (CASE upper(o.xtype) 
      WHEN ''PK'' THEN (select object_name(parent_object_id) FROM sys.key_constraints (nolock) WHERE o.name=name) 
      WHEN ''F'' THEN (select object_name(parent_object_id) FROM sys.foreign_keys (nolock) WHERE o.name=name) 
      WHEN ''TR'' THEN (select object_name(parent_id) FROM sys.triggers (nolock) WHERE o.name=name)  
     ELSE '''' END) as Parent_Object 
FROM sysobjects o (nolock) 
INNER JOIN syscomments sc (nolock) ON o.id = sc.id 
WHERE UPPER(text) LIKE UPPER(@SearchStr) AND substring(o.name,1,3)<> ''dt_'' 
GROUP BY o.name, o.xtype 
END' 
GO 
+0

मुझे यह पसंद है। धन्यवाद! – Jason

1

मुझे इस तरह का एक समाधान मिला ..

USE [Database] 
GO 

SELECT 
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID), 
referencing_object_name = o.name, 
referencing_object_type_desc = o.type_desc, 
referenced_schema_name, 
referenced_object_name = referenced_entity_name, 
referenced_object_type_desc = o1.type_desc, 
referenced_server_name, referenced_database_name 
--,sed.* -- Uncomment for all the columns 
FROM 
sys.sql_expression_dependencies sed 
INNER JOIN 
sys.objects o ON sed.referencing_id = o.[object_id] 
LEFT OUTER JOIN 
sys.objects o1 ON sed.referenced_id = o1.[object_id] 
WHERE 
referenced_entity_name = 'SP_Pay_GetData' 
order by referencing_object_name 

http://blog.sqlauthority.com/2012/12/02/sql-server-find-referenced-or-referencing-object-in-sql-server-using-sys-sql_expression_dependencies/

संबंधित मुद्दे