के साथ कुछ सबस्ट्रिंग के लिए डीबी में सभी टेक्स्ट फ़ील्ड कैसे खोजें, मेरे पास कई सैकड़ों टेबल और कई हजार कॉलम के साथ एक विशाल स्कीमा है। मुझे पता चलेगा कि इस डेटाबेस में कई स्थानों पर एक विशिष्ट आईपी पता संग्रहीत किया जाता है, लेकिन मुझे यकीन नहीं है कि कौन सी तालिका (ओं) या कॉलम इसे संग्रहीत किया जाता है। असल में, मैं हर जगह खोजने की कोशिश कर रहा हूं कि यह आईपी पता डीबी में संग्रहीत किया जाता है, इसलिए मैं इसे उन सभी स्थानों पर एक नए मान में अपडेट कर सकता हूं।टी-एसक्यूएल
तालिका में एक पाठ-कॉलम नाम और मूल्य मुद्रित करने के लिए टी-एसक्यूएल कथन पर मेरी पहली दरार है, जिसमें डेटाबेस में प्रत्येक टेक्स्ट कॉलम के लिए 10.15.13 है।
अब, यह काम करता है, तरह। समस्या यह है कि, जब मैं इसे प्रबंधन स्टूडियो में निष्पादित करता हूं, sp_executesql पर कॉल वास्तव में कुछ भी क्वेरी से सभी रिक्त परिणामों को वापस कर देगा जो कि कुछ भी नहीं लौटाता है (यानी कॉलम में उस सबस्ट्रिंग के साथ कोई रिकॉर्ड नहीं है), और यह परिणाम विंडो भरता है इसके अधिकतम तक, और फिर मैं वास्तव में नहीं देखता कि कुछ भी मुद्रित किया गया था या नहीं।
क्या इस प्रश्न को लिखने का कोई बेहतर तरीका है? या मैं इसे किसी अलग तरीके से चला सकता हूं ताकि यह केवल मुझे टेबल्स और कॉलम दिखाए जहां यह सबस्ट्रिंग मौजूद है?
DECLARE
@SchemaName VARCHAR(50),
@TableName VARCHAR(50),
@ColumnName VARCHAR(50);
BEGIN
DECLARE textColumns CURSOR FOR
SELECT s.Name, tab.Name, c.Name
FROM Sys.Columns c, Sys.Types t, Sys.Tables tab, Sys.Schemas s
WHERE s.schema_id = tab.schema_id AND tab.object_id = c.object_id AND c.user_type_id = t.user_type_id
AND t.Name in ('TEXT','NTEXT','VARCHAR','CHAR','NVARCHAR','NCHAR');
OPEN textColumns
FETCH NEXT FROM textColumns
INTO @SchemaName, @TableName, @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @sql NVARCHAR(MAX),
@ParamDef NVARCHAR(MAX),
@result NVARCHAR(MAX);
SET @sql = N'SELECT ' + @ColumnName + ' FROM ' + @SchemaName + '.' + @TableName + ' WHERE ' + @ColumnName + ' LIKE ''%10.15.13%''';
SET @ParamDef = N'@resultOut NVARCHAR(MAX) OUTPUT';
EXEC sp_executesql @sql, @ParamDef, @resultOut = @result OUTPUT;
PRINT 'Column = ' + @TableName + '.' + @ColumnName + ', Value = ' + @result;
FETCH NEXT FROM textColumns
INTO @SchemaName, @TableName, @ColumnName
END
CLOSE textColumns;
DEALLOCATE textColumns;
END
मैं इस जहां यह तालिका/स्तंभ-स्ट्रिंग में पाया गया था, और उस कॉलम में पूरा मूल्य से पता चलता जैसे परिणाम कुछ देखना चाहते हैं ...
Column = SomeTable.SomeTextColumn, Value = 'https://10.15.13.210/foo'
Column = SomeTable.SomeOtherColumn, Value = '10.15.13.210'
आदि
आपका बंद। इस उदाहरण के साथ अपनी तुलना करें: [SQL सर्वर तालिका में सभी कॉलम में एक स्ट्रिंग मान खोजना और ढूंढना] (http://www.mssqltips.com/sqlservertip/1522/searching-and-finding-a-string-value-in -all-column-in-a-sql-server-table /) – Jeremy
बहुत बढ़िया धन्यवाद! मैंने वास्तव में लिंक से उस समाधान का उपयोग नहीं किया क्योंकि यह एक समय में एक ही तालिका को खोजने के लिए है, लेकिन डेटाबेस में सभी तालिकाओं को खोजने के लिए इसका एक पूरा समाधान था; बिल्कुल मुझे क्या चाहिए। http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm कृपया इसे एक उत्तर के रूप में पोस्ट करें और मैं इसे सही के रूप में चिह्नित करूंगा! – Jim
मैंने उत्तर और साथ ही साथ लिंक के लिए संदर्भित लिंक भी शामिल किया है। धन्यवाद! – Jeremy