0

IM 对 TSQL 非常陌生,并且正在了解存储过程等。

我正在使用代码在我的数据库中的一个表中查找一个值,但我不太确定我将如何使用此代码...

我需要用我的相关表或列名替换所有 @* 还是简单地复制粘贴并执行

谢谢您的帮助

如何在 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 回答