0

IMはTSQLに非常に新しく、保存されたプロシージャなどに頭を悩ませています。

私はデータベース内の1つのテーブル内の値を見つけるためにコードを使用していますが、このコードをどのように使用するのかよくわかりません...

すべての@*を関連するテーブルまたは列の名前に置き換える必要がありますか、それとも単に貼り付けて実行する必要がありますか?

助けてくれてありがとう

SQL Serverデータベースの任意の場所で値を見つけるにはどうすればよいですか?

CREATE PROC SearchAllTables 
(@SearchStr nvarchar(100) ) AS BEGIN  
-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved. 
-- Purpose: To search all columns of all tables for a given search string 
-- Written by: Narayana Vyas Kondreddi 
-- Site: http://vyaskn.tripod.com 
-- Tested on: SQL Server 7.0 and SQL Server 2000 
-- Date modified: 28th July 2002 22:50 GMT  
DECLARE @Results 
TABLE(ColumnName nvarchar(370), ColumnValue nvarchar(3630))  
SET NOCOUNT ON  

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110) 
SET  @TableName = '' 
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')  
WHILE @TableName IS NOT NULL 
BEGIN     
SET @ColumnName = ''     
SET @TableName =      (SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))         
FROM    INFORMATION_SCHEMA.TABLES         
WHERE       TABLE_TYPE = 'BASE TABLE'             
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName             
AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0)      
WHILE (@TableName IS NOT NULL) 
AND (@ColumnName IS NOT NULL)     
BEGIN         
SET @ColumnName =(SELECT MIN(QUOTENAME(COLUMN_NAME))             
FROM    INFORMATION_SCHEMA.COLUMNS             
WHERE       TABLE_SCHEMA    = PARSENAME(@TableName, 2)                 
AND TABLE_NAME  = PARSENAME(@TableName, 1)                 
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')                 
AND QUOTENAME(COLUMN_NAME) > @ColumnName)          
IF @ColumnName IS NOT NULL         
BEGIN             
INSERT INTO @Results             
EXEC             
('SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)                  
FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2)         
END     
END  
END  
SELECT ColumnName, ColumnValue 
FROM @Results 
END 
4

1 に答える 1

1

さて、あなたの質問に答えるために:

まず、コードをクエリ ウィンドウにコピーして実行する必要があります。これにより、ストアド プロシージャが作成されます。

これで、以下を呼び出してストアド プロシージャを呼び出すことができます。

EXEC SearchAllTables 'a string of your choice'

テキスト列 (「char」、「varchar」、「nchar」、「nvarchar」など) からのみヒットを取得することに注意してください。

于 2012-05-28T12:15:51.260 に答える