我在一个安全的环境中工作,需要一种针对我们的SQL实例运行脚本的方法,即所有dbs,表格等,以搜索某些值的使用并显示它们的位置...有什么方法可以这样做?我已经在网上搜索,但似乎无法找到它!
我已经在各种来源(vyaskn)的帮助下整理了这个脚本,但需要帮助扩展代码以包含db和regex功能。我只是没有足够的经验来使用系统视图和动态SQL来自己做。如果搜索所有dbs更加困难,那么让正则表达式工作变得更加重要。
sp_configure 'clr enabled',1
reconfigure
DECLARE @SearchStr NVARCHAR(100)
-- search for uk phone number for example
SET @SearchStr = '(((\+44)? ?(\(0\))? ?)|(0))( ?[0-9]{3,4}){3}'
CREATE TABLE #Results
(
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',
'int', 'decimal' )
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
DROP TABLE #Results
--sp_configure 'clr enabled',0
--reconfigure
答案 0 :(得分:0)
首先,您需要在特定网络中查找所有可用的SQL实例。您可以查看此example for sample code。收到有关所有SQL实例的信息后,例如服务器名称,实例名称,版本和数据库。现在,您必须具有id和密码才能与每个数据库连接,以从任何表中检索任何数据库中的任何信息。接下来创建与每个数据库的连接并执行所需的搜索操作。
您可以在搜索特定正则表达式时获取Full-Text Indexing的帮助。
答案 1 :(得分:0)
我使用EMS中的一个工具成功地在Oracle数据库架构上进行了正则表达式替换。到现在为止,我忘记了我使用的工具,但是我能够将模式导出到SQL文件并将其作为纯文本进行操作。
您可能想要试用SQL Manager和DB Extract产品。他们都有免费试用,都支持广泛的数据库。
将架构,数据和存储过程放入单个SQL文件后,运行搜索应该没问题。