应用T-SQL ...返回基础知识

时间:2012-05-28 10:22:10

标签: tsql

IM对TSQL很新,我正在考虑存储过程等。

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

我是否需要将所有@ *替换为相关的表格或列名称,或者只是简单地粘贴并执行

感谢您的帮助

How do I find a value anywhere in a SQL Server Database?

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 

1 个答案:

答案 0 :(得分:1)

好吧,回答你的问题:

首先,您必须将代码复制到查询窗口并运行它。 这将创建存储过程。

现在您可以通过调用:

来调用存储过程
EXEC SearchAllTables 'a string of your choice'

请注意,您只能从文本列中获取匹配(例如'char','varchar','nchar','nvarchar')。