Ben*_*ton 5 sql t-sql sql-server ssms
我们有一个包含大量 SP 和视图的数据库,其中大多数都很棒,但有些有不可靠的标准(以前的员工使用翻译程序从 MS Access 转移过来)。
例如,有些 SP 的标准如下:
WHERE dbo.something NOT LIKE '*TEST*'
Run Code Online (Sandbox Code Playgroud)
设置这个的人的意思是:
WHERE dbo.something NOT LIKE '%TEST%'
Run Code Online (Sandbox Code Playgroud)
我发现一些人已经在使用这种方法,但我必须输入准确的文本。用 % 字符替换 TEST 一词不起作用(% 返回 0 条记录,TEST 返回一些记录)。
USE [databasename]
SELECT @SEARCHSTRING = '*TEST*', @notcontain = ''
SELECT DISTINCT sysobjects.name AS [Object Name]
,case when sysobjects.xtype = 'P' then 'Stored Proc'
when sysobjects.xtype = 'TF' then 'Function'
when sysobjects.xtype = 'TR' then 'Trigger'
when sysobjects.xtype = 'V' then 'View'
end as [Object Type]
,USER_NAME(sysobjects.uid) AS trigger_owner
--,s.name AS table_schema
,OBJECT_NAME(parent_obj) AS table_name
FROM sysobjects,syscomments
WHERE sysobjects.id = syscomments.id
AND sysobjects.type in ('P','TF','TR','V')
AND sysobjects.category = 0
AND CHARINDEX(@SEARCHSTRING,syscomments.text)>0
AND ((CHARINDEX(@notcontain,syscomments.text)=0
or CHARINDEX(@notcontain,syscomments.text)<>0))
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人知道一种方法,可以在所有对象中搜索带有星号、一些文本和另一个星号的字符串。非常感谢
Dus*_*ton -1
这是另一位开发人员给我的。也许这会起作用?
\n\nDECLARE @SearchStr nvarchar(100)\nSET @SearchStr = 'Coincide'--'Absolute Value of the Difference' --'DOIRteDc' --'Smartin1' -- 'Rgillesp'--'--'## YOUR STRING HERE ##'\n\n-- Copyright \xc2\xa9 2002 Narayana Vyas Kondreddi. All rights reserved.\n-- Purpose: To search all columns of all tables for a given search string\n-- Written by: Narayana Vyas Kondreddi\n-- Site: http://vyaskn.tripod.com\n-- Updated and tested by Tim Gaunt\n-- http://www.thesitedoctor.co.uk\n-- http://blogs.thesitedoctor.co.uk/tim/2010/02/19/Search+Every+Table+And+Field+In+A+SQL+Server+Database+Updated.aspx\n-- Tested on: SQL Server 7.0, SQL Server 2000, SQL Server 2005 and SQL Server 2010\n-- Date modified: 03rd March 2011 19:00 GMT\nCREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))\n\nSET NOCOUNT ON\n\nDECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)\nSET @TableName = ''\nSET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')\n\nWHILE @TableName IS NOT NULL\n\nBEGIN\n SET @ColumnName = ''\n SET @TableName = \n (\n SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))\n FROM INFORMATION_SCHEMA.TABLES\n WHERE TABLE_TYPE = 'BASE TABLE'\n AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName\n AND OBJECTPROPERTY(\n OBJECT_ID(\n QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)\n ), 'IsMSShipped'\n ) = 0\n )\n\n WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)\n\n BEGIN\n SET @ColumnName =\n (\n SELECT MIN(QUOTENAME(COLUMN_NAME))\n FROM INFORMATION_SCHEMA.COLUMNS\n WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)\n AND TABLE_NAME = PARSENAME(@TableName, 1)\n AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')\n AND QUOTENAME(COLUMN_NAME) > @ColumnName\n )\n\n IF @ColumnName IS NOT NULL\n\n BEGIN\n INSERT INTO #Results\n EXEC\n (\n 'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' +\n ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2\n )\n END\n END \nEND\n\nSELECT distinct ColumnName, ColumnValue FROM #Results\n\nDROP TABLE #Results\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
2895 次 |
最近记录: |