আমি স্ট্রিংয়ের জন্য কীভাবে একটি এসকিউএল সার্ভার ডাটাবেস অনুসন্ধান করব?


121

আমি জানি এটি সম্ভব, তবে কীভাবে তা আমি জানি না।

নির্দিষ্ট স্ট্রিংয়ের সমস্ত উল্লেখের জন্য আমাকে একটি এসকিউএল সার্ভার ডাটাবেস অনুসন্ধান করতে হবে।

উদাহরণস্বরূপ: আমি "tblEmployes" (টেবিলের মধ্যে ডেটা নয়) স্ট্রিংয়ের জন্য সমস্ত টেবিল, দর্শন, ফাংশন, সঞ্চিত পদ্ধতি, ... অনুসন্ধান করতে চাই।

আমার এটির প্রয়োজনের একটি কারণ হ'ল আমি তৈরি করা কিছু অতিরিক্ত ডেটা টেবিলগুলি মুছে ফেলতে চাই, তবে আমি আশঙ্কা করছি যে তারা পদ্ধতিগুলি বা কার্যাবলীতে কোথাও ব্যবহৃত হতে পারে।



1
আশা করছি এটা ইচ্ছা সাহায্যের কেউ stackoverflow.com/questions/13174627/...
NoNaMe

উত্তর:


155

এটি একটি নির্দিষ্ট ডাটাবেসে প্রতিটি টেবিলের প্রতিটি কলাম অনুসন্ধান করবে। আপনি যে ডাটাবেসে অনুসন্ধান করতে চান তাতে সঞ্চিত পদ্ধতি তৈরি করুন।

দশটি সর্বাধিক জিজ্ঞাসিত এসকিউএল সার্ভারের প্রশ্ন এবং তাদের উত্তর :

CREATE PROCEDURE FindMyData_String
    @DataToFind NVARCHAR(4000),
    @ExactMatch BIT = 0
AS
SET NOCOUNT ON

DECLARE @Temp TABLE(RowId INT IDENTITY(1,1), SchemaName sysname, TableName sysname, ColumnName SysName, DataType VARCHAR(100), DataFound BIT)

    INSERT  INTO @Temp(TableName,SchemaName, ColumnName, DataType)
    SELECT  C.Table_Name,C.TABLE_SCHEMA, C.Column_Name, C.Data_Type
    FROM    Information_Schema.Columns AS C
            INNER Join Information_Schema.Tables AS T
                ON C.Table_Name = T.Table_Name
        AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
    WHERE   Table_Type = 'Base Table'
            And Data_Type In ('ntext','text','nvarchar','nchar','varchar','char')


DECLARE @i INT
DECLARE @MAX INT
DECLARE @TableName sysname
DECLARE @ColumnName sysname
DECLARE @SchemaName sysname
DECLARE @SQL NVARCHAR(4000)
DECLARE @PARAMETERS NVARCHAR(4000)
DECLARE @DataExists BIT
DECLARE @SQLTemplate NVARCHAR(4000)

SELECT  @SQLTemplate = CASE WHEN @ExactMatch = 1
                            THEN 'If Exists(Select *
                                          From   ReplaceTableName
                                          Where  Convert(nVarChar(4000), [ReplaceColumnName])
                                                       = ''' + @DataToFind + '''
                                          )
                                     Set @DataExists = 1
                                 Else
                                     Set @DataExists = 0'
                            ELSE 'If Exists(Select *
                                          From   ReplaceTableName
                                          Where  Convert(nVarChar(4000), [ReplaceColumnName])
                                                       Like ''%' + @DataToFind + '%''
                                          )
                                     Set @DataExists = 1
                                 Else
                                     Set @DataExists = 0'
                            END,
        @PARAMETERS = '@DataExists Bit OUTPUT',
        @i = 1

SELECT @i = 1, @MAX = MAX(RowId)
FROM   @Temp

WHILE @i <= @MAX
    BEGIN
        SELECT  @SQL = REPLACE(REPLACE(@SQLTemplate, 'ReplaceTableName', QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)), 'ReplaceColumnName', ColumnName)
        FROM    @Temp
        WHERE   RowId = @i


        PRINT @SQL
        EXEC SP_EXECUTESQL @SQL, @PARAMETERS, @DataExists = @DataExists OUTPUT

        IF @DataExists =1
            UPDATE @Temp SET DataFound = 1 WHERE RowId = @i

        SET @i = @i + 1
    END

SELECT  SchemaName,TableName, ColumnName
FROM    @Temp
WHERE   DataFound = 1
GO

এটি চালানোর জন্য, কেবল এটি করুন:

exec FindMyData_string 'google', 0

এটি আশ্চর্যজনকভাবে ভাল কাজ করে !!!


২ য় প্যারাম "হুটো ম্যাচ = 0" এর অর্থ কী?
জুনচেন লিউ

আপনি যদি স্ক্রিপ্টটি দেখেন তবে এটি কেবলমাত্র একটি পরম যা 'মান' বা '% মানের%' ব্যবহার করে অনুসন্ধানের স্ট্রিং করবেন কিনা তা সিদ্ধান্ত নেওয়ার আগেই কেস স্টেটমেন্টে পরীক্ষা করা হয়
শিজল

5
এটি কেবল প্রথম ফলাফলটি খুঁজে পায় যা এটি খুঁজে পায় এবং অন্য কিছুই না। এটির জন্য কি ডাটাবেসে স্ট্রিংয়ের সমস্ত দৃষ্টান্ত ফেরত দেওয়ার উপায় আছে?
কিউবার্টস

1
আমাকে এই স্ক্রিপ্টটি কোথায় সংরক্ষণ করতে হবে এবং ফাইলটি কার্যকর করার জন্য কোন এক্সটেনশানটির প্রয়োজন? আমি কোথায় মৃত্যুদণ্ড কার্যকর করব exec FindMyData_string 'google', 0?
কালো

কিছু ডাটাবেস সংবেদনশীল নয়, দয়া করে আপনার কোডে INFORMATION_SCHEMA.COLUMNS ব্যবহার করুন। অন্যথায় এই স্ক্রিপ্টটি 'অবৈধ অবজেক্টের নাম তথ্য_সীমা' ত্রুটি নিক্ষেপ করবে।
ফাতিহ

59

যদি আপনাকে নামের সাথে ডাটাবেস অবজেক্টস (যেমন টেবিল, কলাম, এবং ট্রিগার) সন্ধান করতে হয় - এসকিউএল অনুসন্ধান নামে ফ্রি রেডগেট সফ্টওয়্যার সরঞ্জামটি দেখুন যা এটি করে - এটি কোনও ধরণের স্ট্রিংয়ের জন্য আপনার সম্পূর্ণ ডাটাবেসটি অনুসন্ধান করে।

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এটা কোনো DBA বা ডাটাবেস বিকাশকারীর জন্য একটি দুর্দান্ত আছে-আবশ্যক হাতিয়ার - আমি ইতিমধ্যে এটি একেবারে এর উল্লেখ হয়নি বিনামূল্যে ব্যবহারের যে কোন ধরণের জন্য ব্যবহার করতে ??


25
ভাল সরঞ্জাম, তবে এটি টেবিলগুলিতে স্ট্রিংগুলি অনুসন্ধান করে না
জিলমার্টিন

2
আসল সারিগুলি অনুসন্ধান করে না
লার্নিংজ্রদেভ

8
@LearningJrDev: না - এটি ডাটাবেস অবজেক্টস - টেবিল, ভিউ, সঞ্চিত পদ্ধতি ইত্যাদি - নামে অনুসন্ধান করে। এটি টেবিলগুলিতে থাকা ডেটা অনুসন্ধান করে না - আমি কখনই দাবি করিনি!
marc_s

4
@ জিলমার্টিন আমাকে "tblEmployes" স্ট্রিংয়ের জন্য সমস্ত টেবিল, ভিউ, ফাংশন, সঞ্চিত পদ্ধতি, ... (টেবিলের মধ্যে ডেটা নয়) আপনি যদি টেবিলের মধ্যে ডেটা অনুসন্ধান করতে চান তবে আপনার টি-এসকিউএল ভাষা রয়েছে। এই সরঞ্জামটি রিফ্যাক্টরিং কার্যগুলির জন্য দুর্দান্ত।
নেমকে

49

এছাড়াও আপনি চেষ্টা করে দেখতে পারেন ApexSQL অনুসন্ধান - এটি একটি বিনামূল্যে SSMS অ্যাড-মধ্যে অনুরূপ এসকিউএল অনুসন্ধান

আপনি যদি কেবলমাত্র এসকিউএল ব্যবহার করতে চান তবে আপনি এই স্ক্রিপ্টটি চেষ্টা করতে পারেন:

select
S.name as [Schema],
o.name as [Object],
o.type_desc as [Object_Type],
C.text as [Object_Definition]
from sys.all_objects O inner join sys.schemas S on O.schema_id = S.schema_id
inner join sys.syscomments C on O.object_id = C.id
where S.schema_id not in (3,4) -- avoid searching in sys and INFORMATION_SCHEMA schemas
and C.text like '%ICE_%'
order by [Schema]

4
অ্যাপেক্সএসকিউএল অনুসন্ধান দুর্দান্ত। এই সরঞ্জাম সহ স্ক্রিপ্টগুলির প্রয়োজন নেই।
মিগুয়েল

1
এটি একটি দুর্দান্ত সহায়তা সাথী। এটি প্রশংসা করুন: ডি
মিনিজিউইক

3
এই কোয়েরিটি কেবলমাত্র বস্তুর জন্য অনুসন্ধান করে। আমাদের বিদ্যমান সমস্ত সারণীতে একটি স্ট্রিং অনুসন্ধান করতে হবে।
César

অ্যাপেক্সএসকিউএল যদিও আপনাকে আপনার ধরণের পছন্দ করতে দেয় তা দুর্দান্ত কাজ করে
পিটারফনেট

আমি প্রক্স এবং দর্শনগুলির মধ্যে একটি স্ট্রিং সন্ধান করার চেষ্টা করছি। এসকিউএল আমার জন্য নিখুঁত। ধন্যবাদ.
MsTapp

20

আপনি আপনার হার্ড ড্রাইভ / ডেস্কটপে আপনার ডাটাবেস (ছোট হলে) রফতানি করতে পারেন এবং তারপরে একটি পাঠ্য অনুসন্ধান প্রোগ্রাম বা পাঠ্য সম্পাদকের মাধ্যমে একটি স্ট্রিং অনুসন্ধান করতে পারেন।


7
এটি আসলে কোনও খারাপ ধারণা নয়।
অলিভার ট্যাপিন

:) আপনিও স্ক্রিপ্ট ব্যবহার করতে পারেন। তবে একটি ভাল পাঠ্য সম্পাদক আপনাকে এসকিউএল কোডের জন্য যা যা প্রয়োজন প্রায় করতে পারে।
ইভান Ivković

1
এবং কোন পাঠ্য সম্পাদক অনেক জিবি ডেটা লোড করে খুশি হবেন?
বোহদান

সম্ভবত কোনওটি নয়, তবে সেক্ষেত্রে আপনি একটি তৃতীয় পক্ষের ফাইল অনুসন্ধান ইঞ্জিন ব্যবহার করতে পারেন এবং এমন অ্যাপ্লিকেশন রয়েছে যা ফাইলগুলি আপনার পছন্দ মতো টুকরো টুকরো টুকরো টুকরো করে দিতে পারে can
ইভান ইভভকুইć

1
এমএস এসকিউএল রফতানিগুলি বাইনারি ফাইল এবং তাই আপনার প্রস্তাবিত পদ্ধতিটি ব্যবহার করে রফতানি, পড়তে বা অনুসন্ধান করা যায় না।
স্পেন্সার হিল

17

এসকিউএল সার্ভারে নাম অনুসারে একটি টেবিল পাওয়ার জন্য:

SELECT *
FROM sys.Tables
WHERE name LIKE '%Employees%'

নামে একটি সঞ্চিত পদ্ধতি সন্ধানের জন্য:

SELECT name
FROM sys.objects
WHERE name = 'spName'

কোনও টেবিল সম্পর্কিত সমস্ত সঞ্চিত পদ্ধতি পেতে:

----Option 1
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%tablename%'
----Option 2
SELECT DISTINCT o.name, o.xtype
FROM syscomments c
INNER JOIN sysobjects o ON c.id=o.id
WHERE c.TEXT LIKE '%tablename%'

2
এই অনুসন্ধানগুলি কেবলমাত্র বস্তুর সন্ধান করে। আমাদের বিদ্যমান সমস্ত সারণীতে একটি স্ট্রিং অনুসন্ধান করতে হবে।
César

6

এই কোড অনুসন্ধান পদ্ধতি এবং ফাংশন কিন্তু সারণীতে অনুসন্ধান নয় :)

SELECT name 
FROM   sys.all_objects 
WHERE  Object_definition(object_id) 
LIKE '%text%' 
ORDER BY name

4

আপনি পারে;

  1. একটি একক ফাইলে ডাটাবেস স্ক্রিপ্ট করুন এবং পাঠ্য সম্পাদক ব্যবহার করে tblEmployees ফাইলটি অনুসন্ধান করুন। ইন SQL সার্ভার ম্যানেজমেন্ট স্টুডিও (SSMS), ডান ডাটাবেসের উপর ক্লিক করুন এবং স্ক্রিপ্ট নির্মাণ
  2. কোন অন্যান্য অবজেক্টের উপর নির্ভরশীল তা দেখতে টিবিএলএম্পলয়েসের উপর ডান ক্লিক করে এসএসএমএস 'নির্ভরতা দেখুন' ব্যবহার করুন
  3. নাম অনুসারে সমস্ত ডেটাবেস অবজেক্ট এবং কীওয়ার্ডের সাহায্যে সামগ্রী অনুসন্ধান করতে রেডগেট সফ্টওয়্যার এর এসকিউএল অনুসন্ধানের মতো একটি নিখরচায় তৃতীয় পক্ষের সরঞ্জাম ব্যবহার করুন ।

# 1 ভাল শোনাচ্ছে। আমার কেবল অ্যাক্সেসের অধিকার নেই বলে আমি এটি সার্ভারে চালাতে পারি না।
বোবেতকো

ধন্যবাদ। কেউ আপনাকে কেন -1 দিয়েছে তা নিশ্চিত নয়। আমি ঠিক করেছিলাম। রেডগেটের চেষ্টা করা ... যা আমি চাই তা পুরোপুরি করে।
বোবেতকো

2

এটি প্রতিটি ডাটাবেসের উপর একটি স্ট্রিং অনুসন্ধান করবে:

declare @search_term varchar(max)
set @search_term = 'something'

select @search_term = 'use ? SET QUOTED_IDENTIFIER ON
select
    ''[''+db_name()+''].[''+c.name+''].[''+b.name+'']'' as [object],
    b.type_desc as [type],
    d.obj_def.value(''.'',''varchar(max)'') as [definition]
from (
    select distinct
        a.id
    from sys.syscomments a
    where a.[text] like ''%'+@search_term+'%''
) a
inner join sys.all_objects b
    on b.[object_id] = a.id
inner join sys.schemas c
    on c.[schema_id] = b.[schema_id]
cross apply (
    select
        [text()] = a1.[text]
    from sys.syscomments a1
    where a1.id = a.id
    order by a1.colid
    for xml path(''''), type
) d(obj_def)
where c.schema_id not in (3,4) -- avoid searching in sys and INFORMATION_SCHEMA schemas
    and db_id() not in (1,2,3,4) -- avoid sys databases'

if object_id('tempdb..#textsearch') is not null drop table #textsearch
create table #textsearch
(
    [object] varchar(300),
    [type] varchar(300),
    [definition] varchar(max)
)

insert #textsearch
exec sp_MSforeachdb @search_term

select *
from #textsearch
order by [object]

2

আমার সংস্করণ ...

আমি সুস্পষ্ট কারণে এটির নাম "খড়ের ছিদ্র" রেখেছি।

এটি প্রতিটি সারি এবং প্রতিটি কলামে একটি নির্দিষ্ট মান অনুসন্ধান করে, কলামের নাম ইত্যাদির জন্য নয় etc.

এক্সিকিউট চালান (অবশ্যই প্রথম দুটি ভেরিয়েবলের মানগুলি প্রতিস্থাপন করুন):

DECLARE @SEARCH_DB VARCHAR(100)='REPLACE_WITH_YOUR_DB_NAME'
DECLARE @SEARCH_VALUE_LIKE NVARCHAR(100)=N'%REPLACE_WITH_SEARCH_STRING%'

SET NOCOUNT ON;
DECLARE col_cur CURSOR FOR
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM information_schema.columns WHERE TABLE_CATALOG=@SEARCH_DB AND DATA_TYPE NOT IN ('timestamp', 'datetime');

DECLARE @TOTAL int = (SELECT COUNT(*)
FROM information_schema.columns WHERE TABLE_CATALOG=@SEARCH_DB AND DATA_TYPE NOT IN ('timestamp', 'datetime'));


DECLARE @TABLE_CATALOG nvarchar(500), @TABLE_SCHEMA nvarchar(500), @TABLE_NAME nvarchar(500), @COLUMN_NAME nvarchar(500), @DATA_TYPE nvarchar(500);
DECLARE @SQL nvarchar(4000)='';

PRINT '-------- BEGIN SEARCH --------';
OPEN col_cur;

FETCH NEXT FROM col_cur INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE;

BEGIN TRY DROP TABLE ##RESULTS; END TRY BEGIN CATCH END CATCH
CREATE TABLE ##RESULTS( TABLE_CATALOG nvarchar(500), TABLE_SCHEMA nvarchar(500), TABLE_NAME nvarchar(500), COLUMN_NAME nvarchar(500), DATA_TYPE nvarchar(500), RECORDS int)
DECLARE @SHOULD_CAST bit=0
DECLARE @i int =0
DECLARE @progress_sum bigint=0

WHILE @@FETCH_STATUS = 0
BEGIN
    -- PRINT '' + CAST(@i as varchar(100)) +' of ' + CAST(@TOTAL as varchar(100)) + '  ' + @TABLE_CATALOG+'.'+@TABLE_SCHEMA+'.'+@TABLE_NAME+': '+@COLUMN_NAME+' ('+@DATA_TYPE+')';

    SET @SHOULD_CAST = (SELECT CASE @DATA_TYPE
                                WHEN 'varchar' THEN 0
                                WHEN 'nvarchar' THEN 0
                                WHEN 'char' THEN 0
                                ELSE 1 END)

    SET @SQL='SELECT '''+@TABLE_CATALOG+''' catalog_name, '''+@TABLE_SCHEMA+''' schema_name, '''+@TABLE_NAME+''' table_name, '''+@COLUMN_NAME+''' column_name, '''+@DATA_TYPE+''' data_type, ' +
            +' COUNT(['+@COLUMN_NAME+']) records '+
            +' FROM '+@TABLE_CATALOG+'.'+@TABLE_SCHEMA+'.'+@TABLE_NAME +
            +' WHERE ' + CASE WHEN @SHOULD_CAST=1 THEN 'CAST(['+@COLUMN_NAME + '] as NVARCHAR(max)) ' ELSE ' ['+@COLUMN_NAME + '] ' END
            +' LIKE '''+ @SEARCH_VALUE_LIKE + ''' '

    -- PRINT @SQL;

    IF @i % 100 = 0
        BEGIN
            SET @progress_sum = (SELECT SUM(RECORDS) FROM ##RESULTS)
            PRINT CAST (@i as varchar(100)) +' of ' + CAST(@TOTAL as varchar(100)) +': '+ CAST (@progress_sum as varchar(100))
        END

    INSERT INTO ##RESULTS (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, RECORDS)
    EXEC(@SQL)

    FETCH NEXT FROM col_cur INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE;
    SET @i=@i+1
    -- IF @i > 1000
    --     BREAK
END
CLOSE col_cur;
DEALLOCATE col_cur;

SELECT * FROM ##RESULTS WHERE RECORDS>0;

তারপরে ফলাফলগুলি দেখার জন্য, অন্য উইন্ডো থেকে চালানোর সময়, কার্যকর করুন:

DECLARE @SEARCH_VALUE_LIKE NVARCHAR(100)=N'%@FLEX@%'
SELECT * FROM ##RESULTS WHERE RECORDS>0;

SET NOCOUNT ON;
DECLARE col_cur CURSOR FOR
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM ##RESULTS WHERE RECORDS>0;

DECLARE @TABLE_CATALOG nvarchar(500), @TABLE_SCHEMA nvarchar(500), @TABLE_NAME nvarchar(500), @COLUMN_NAME nvarchar(500), @DATA_TYPE nvarchar(500);
DECLARE @SQL nvarchar(4000)='';

OPEN col_cur;

FETCH NEXT FROM col_cur INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE;
DECLARE @i int =0
DECLARE @SHOULD_CAST bit=0

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SHOULD_CAST = (SELECT CASE @DATA_TYPE
                                WHEN 'varchar' THEN 0
                                WHEN 'nvarchar' THEN 0
                                WHEN 'char' THEN 0
                                ELSE 1 END)

    SET @SQL='SELECT '''+@TABLE_CATALOG+''' catalog_name, '''+@TABLE_SCHEMA+''' schema_name, '''+@TABLE_NAME+''' table_name, '''+@COLUMN_NAME+''' column_name, '''+@DATA_TYPE+''' data_type, ' +
            +' ['+@COLUMN_NAME+']'+
            +', * '
            +' FROM '+@TABLE_CATALOG+'.'+@TABLE_SCHEMA+'.'+@TABLE_NAME +
            +' WHERE ' + CASE WHEN @SHOULD_CAST=1 THEN 'CAST(['+@COLUMN_NAME + '] as NVARCHAR(max)) ' ELSE ' ['+@COLUMN_NAME + '] ' END
            +' LIKE '''+ @SEARCH_VALUE_LIKE + ''' '

    PRINT @SQL;

    EXEC(@SQL)

    FETCH NEXT FROM col_cur INTO @TABLE_CATALOG, @TABLE_SCHEMA, @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE;
    SET @i=@i+1
    -- IF @i > 10
    --    BREAK
END
CLOSE col_cur;
DEALLOCATE col_cur;

এটি সম্পর্কে খুব কম উল্লেখ করা হয়েছে:

  • এটি লুপের সময় ব্লক করার পরিবর্তে কার্সার ব্যবহার করে
  • এটি অগ্রগতি মুদ্রণ করতে পারে (প্রয়োজনে নিরঙ্কুশ)
  • এটি কয়েকবার চেষ্টা করার পরে প্রস্থান করতে পারে (শেষ দিকে যদি আইএফটিকে কোনও অসুবিধা না দেয়)
  • এটি সমস্ত রেকর্ড প্রদর্শন করে
  • আপনি প্রয়োজন হিসাবে এটি টিউন জরিমানা করতে পারেন

-অস্বীকার:

  • এটি উত্পাদন পরিবেশে চালাবেন না!
  • এটা ধীর । ডিবি যদি অন্য পরিষেবাদি / ব্যবহারকারীদের দ্বারা অ্যাক্সেস করে থাকে তবে দয়া করে সমস্ত বাছাইয়ের প্রতিটি টেবিলের নাম, বিশেষত গতিশীল সিলেক্টদের পরে "উইথ (নলক)" যুক্ত করুন।
  • এটি সমস্ত ধরণের এসকিউএল ইঞ্জেকশন বিকল্পের বিরুদ্ধে বৈধতা / সুরক্ষা দেয় না।
  • আপনার ডিবি যদি বিশাল হয় তবে কিছুটা ঘুমের জন্য নিজেকে প্রস্তুত করুন, কয়েক মিনিটের পরে কোয়েরিটি হত্যা করা হবে না তা নিশ্চিত করুন।
  • এটি ইনটস / বিগিন্টস / স্মার্টসিন্ট / টিনিনিন্টস সহ স্ট্রিংয়ের কিছু মান কাস্ট করে। আপনার যদি এগুলির দরকার না হয় তবে স্ক্রিপ্টের শীর্ষে টাইমস্ট্যাম্পগুলি সহ একই বর্জনীয় তালিকায় রাখুন।

2

আমাকে একটি ডাটাবেসে অ্যাক্সেস দেওয়া হয়েছিল, তবে আমার কোয়েরিটি কোথায় সারণী করা হচ্ছে তা সেই টেবিলটিতে নয়।

@Marc_s Answe r দ্বারা অনুপ্রাণিত হয়ে আমার একটি নজর ছিল হেইডিএসকিউএল যা একটি উইন্ডোজ প্রোগ্রাম যা মাইএসকিউএল, এসকিউএল সার্ভার এবং পোস্টগ্রিসকিউএল মোকাবেলা করতে পারে।

আমি দেখেছি এটি স্ট্রিংয়ের জন্য একটি ডাটাবেসও অনুসন্ধান করতে পারে।

অনুসন্ধান ক্লিক করুন, তারপরে সার্ভারে পাঠ্য সন্ধান করুন

অনুসন্ধান সরঞ্জাম খোলা।  নিশ্চিত হয়ে নিন যে ডিবি নির্বাচিত হয়েছে

এটি প্রতিটি টেবিল অনুসন্ধান করবে এবং আপনাকে প্রতি টেবিলের জন্য স্ট্রিংটি খুঁজে পেতে কতবার দেবে!


1

সমস্ত সঞ্চিত প্রক্রিয়া, দর্শন এবং ফাংশনগুলির সামগ্রীটি টেবিলের সিসকমেন্টসের ফিল্ড পাঠ্যে সংরক্ষণ করা হয় । সমস্ত বস্তুর নাম টেবিল সিসোবজেক্টগুলিতে জমা হয় এবং কলামগুলি সিসকলমগুলিতে থাকে

এই তথ্য থাকার পরে, আপনি নির্দিষ্ট শব্দটির দর্শন, সঞ্চিত পদ্ধতি এবং ফাংশনগুলির বিষয়বস্তু অনুসন্ধান করতে এই কোডটি ব্যবহার করতে পারেন:

Select b.name from syscomments a
inner join sysobjects b on a.id = b.id
where text like '%tblEmployes%'

এই ক্যোয়ারীটি আপনাকে এমন অবজেক্ট দেয় যা "tblEmployes" শব্দটি ধারণ করে।

অবজেক্টের নামে অনুসন্ধান করতে আপনি এই কোডটি ব্যবহার করতে পারেন:

Select name from sysobjects
where name like  '%tblEmployes%'

এবং অবশেষে "tblEmployes" শব্দযুক্ত কমপক্ষে একটি কলামযুক্ত অবজেক্টগুলি সন্ধান করতে আপনি এই কোডটি ব্যবহার করতে পারেন:

Select b.name from syscolumns a inner join sysobjects b on a.id = b.id
where a.name like  '%tblEmployes%'

আপনি এই তিনটি প্রশ্নের ইউনিয়নের সাথে একত্রিত করতে পারেন:

Select distinct b.name from syscomments a
inner join sysobjects b on a.id = b.id
where text like '%tblEmployes%'
union
Select distinct name from sysobjects
where name like  '%tblEmployes%'
union
Select distinct b.name from syscolumns a inner join sysobjects b on a.id = b.id
where a.name like  '%tblEmployes%'

এই ক্যোয়ারির সাহায্যে আপনার কাছে সামগ্রী বা নাম বা কলাম হিসাবে "tblEmployes" শব্দযুক্ত সমস্ত বস্তু রয়েছে।


0

এখানে ব্যবহারকারী লি --''''''---------- '' '' '' '' '' 'দ্বারা জমা দেওয়া একই স্ক্রিপ্ট এখানে রয়েছে , তবে কেস-সংবেদনশীল এসকিউএল-তে কাজ করার জন্য সংশোধন করা হয়েছে উদাহরণস্বরূপ, এবং কিছু অন্যান্য ছোটখাট উন্নতি সহ।

DROP PROCEDURE IF EXISTS dbo.spFind_Text_In_Database
GO

CREATE PROCEDURE dbo.spFind_Text_In_Database
    @strText_To_Find NVARCHAR(4000),
    @bitExact_Match BIT = 0
AS
SET NOCOUNT ON

DECLARE @Temp TABLE(RowId INT IDENTITY(1,1), SchemaName sysname, TableName sysname, ColumnName SysName, DataType VARCHAR(100), DataFound BIT)

    INSERT  INTO @Temp(TableName,SchemaName, ColumnName, DataType)
    SELECT  C.TABLE_NAME, C.TABLE_SCHEMA, C.COLUMN_NAME, C.DATA_TYPE
    FROM    INFORMATION_SCHEMA.COLUMNS AS C
            INNER Join INFORMATION_SCHEMA.TABLES AS T
                ON C.TABLE_NAME = T.TABLE_NAME
        AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
    WHERE   TABLE_TYPE = 'BASE TABLE'
            And DATA_TYPE In ('ntext','text','nvarchar','nchar','varchar','char')


DECLARE @i INT
DECLARE @MAX INT
DECLARE @TableName sysname
DECLARE @ColumnName sysname
DECLARE @SchemaName sysname
DECLARE @SQL NVARCHAR(4000)
DECLARE @PARAMETERS NVARCHAR(4000)
DECLARE @DataExists BIT
DECLARE @SQLTemplate NVARCHAR(4000)

SELECT  @SQLTemplate = CASE WHEN @bitExact_Match = 1
                            THEN 'If Exists(Select *
                                          From   ReplaceTableName
                                          Where  Convert(nVarChar(4000), [ReplaceColumnName])
                                                       = ''' + @strText_To_Find + '''
                                          )
                                     Set @DataExists = 1
                                 Else
                                     Set @DataExists = 0'
                            ELSE 'If Exists(Select *
                                          From   ReplaceTableName
                                          Where  Convert(nVarChar(4000), [ReplaceColumnName])
                                                       Like ''%' + @strText_To_Find + '%''
                                          )
                                     Set @DataExists = 1
                                 Else
                                     Set @DataExists = 0'
                            END,
        @PARAMETERS = '@DataExists Bit OUTPUT',
        @i = 1

SELECT @i = 1, @MAX = MAX(RowId)
FROM   @Temp

WHILE @i <= @MAX
    BEGIN
        SELECT  @SQL = REPLACE(REPLACE(@SQLTemplate, 'ReplaceTableName', QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)), 'ReplaceColumnName', ColumnName)
        FROM    @Temp
        WHERE   RowId = @i


        PRINT @SQL
        EXEC sp_executesql @SQL, @PARAMETERS, @DataExists = @DataExists OUTPUT

        IF @DataExists =1
            UPDATE @Temp SET DataFound = 1 WHERE RowId = @i

        SET @i = @i + 1
    END

SELECT  SchemaName,TableName, ColumnName
FROM    @Temp
WHERE   DataFound = 1
GO

0

এসকিউএল ডাটাবেস অবজেক্টগুলি অনুসন্ধান করা এসএসএল সার্ভার ম্যানেজমেন্ট স্টুডিও (এসএসএমএস) দ্বারা নিম্নলিখিত পদ্ধতিগুলির সাথে এসএসএমএস অবজেক্ট অনুসন্ধানের মাধ্যমে সম্ভব: অবজেক্ট এক্সপ্লোরার বিশদ বা টি-এসকিউএল স্ক্রিপ্টগুলি নিম্নলিখিত হিসাবে ব্যাখ্যা করা হয়েছে:


0

আপনি কীভাবে এফএমডিবি লাইব্রেরি ব্যবহার করে সুইফটে ডাটাবেস অনুসন্ধান করতে পারেন তা এখানে is

প্রথমে এই লিঙ্কে যান এবং এটি আপনার প্রকল্পে যুক্ত করুন: এফএমডিবি । আপনি যখন এটি করেছেন, তারপরে আপনি এটি কীভাবে করবেন। উদাহরণস্বরূপ, আপনার কাছে ব্যক্তি নামক একটি টেবিল রয়েছে এবং আপনার প্রথম নাম এবং দ্বিতীয় নাম রয়েছে এবং আপনি প্রথম নাম দিয়ে ডেটা সন্ধান করতে চান, তার জন্য এখানে একটি কোড রয়েছে:

    func loadDataByfirstName(firstName : String, completion: @escaping CompletionHandler){
    if isDatabaseOpened {
        let query = "select * from Person where firstName like '\(firstName)'"
        do {
            let results = try database.executeQuery(query, values: [firstName])
            while results.next() {
                let firstName = results.string(forColumn: "firstName") ?? ""
                let lastName = results.string(forColumn: "lastName") ?? ""
                let newPerson = Person(firstName: firstName, lastName: lastName)
                self.persons.append(newPerson)
            }
            completion(true)
        }catch let err {
            completion(false)
            print(err.localizedDescription)
        }
        database.close()
    }
}

তারপরে আপনার ভিউকন্ট্রোলারে আপনি যে ব্যক্তির বিশদটি অনুসন্ধান করছেন তার সন্ধান করতে আপনি এটি লিখবেন:

  override func viewWillAppear(_ animated: Bool) {
     super.viewWillAppear(animated)
      SQLManager.instance.openDatabase { (success) in
        if success {
            SQLManager.instance.loadDataByfirstName(firstName: "Hardi") { (success) in
                if success {
                    // You have your data Here
                }
            }
        }
    }
}

এই উত্তর (এসকিউএলাইট সম্পর্কে) প্রশ্নের উত্তর দেয় না। প্রশ্নটি এসকিউএল সার্ভার সম্পর্কে ছিল (মাইক্রোসফ্টের পণ্য - যদিও কোনও পণ্যের জন্য যেমন জেনেরিক নাম বেছে নেওয়ার জন্য তাদের দোষ রয়েছে)। গিটহাব পৃষ্ঠা থেকে: " এফএমডিবি v2.7 ... এটি এসকিউএলাইটের চারপাশে একটি উদ্দেশ্য-সি মোড়ক "
পিটার মর্টেনসেন

0

আমি যদি কিছু অনুসন্ধান করতে চাই তবে তা যদি আমি খুঁজতে চাই তবে আমি এটি ব্যবহার করি:

DECLARE @search_string    varchar(200)
    SET @search_string = '%myString%'

    SELECT DISTINCT
           o.name AS Object_Name,
           o.type_desc,
           m.definition
      FROM sys.sql_modules m
           INNER JOIN
           sys.objects o
             ON m.object_id = o.object_id
     WHERE m.definition Like @search_string;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.