好比存儲過程:sql
/*----------------------------------------------------------*/ /* [sp_TextDef] */ /*----------------------------------------------------------*/ IF EXISTS ( SELECT 1 FROM sys.objects o WHERE object_id = object_id( N'[sp_TextDef]' ) AND OBJECTPROPERTY( object_id, N'IsProcedure') = 1 ) DROP PROCEDURE [sp_TextDef] GO CREATE PROC [dbo].[sp_TextDef] ( @ObjectName nvarchar(256) = NULL ) AS /* 2009-07-10 19:20 */ BEGIN SET NOCOUNT ON DECLARE @default_schema_name nvarchar(128) SELECT @default_schema_name = default_schema_name FROM sys.database_principals WHERE name = user_name() SELECT @ObjectName = RTRIM( LTRIM( @ObjectName ) ) IF( LEFT( @ObjectName, 1 ) = '[' AND RIGHT( @ObjectName, 1 ) = ']' ) BEGIN SELECT @ObjectName = REPLACE( REPLACE( @ObjectName, '[', '' ), ']', '' ) END DECLARE @id INT DECLARE @schemaname nvarchar(256) DECLARE @Text nvarchar(MAX) DECLARE @name nvarchar(256) DECLARE @Type nvarchar(256) --DECLARE @temp nvarchar(4000) DECLARE @pos INT, @pos1 INT DECLARE name_cursor CURSOR FOR SELECT schema_name( o.schema_id ), o.object_id, o.name, o.type FROM sys.all_objects o WHERE ( o.type IN ( 'P', 'FN', 'IF', 'TF', 'TR', 'V' ) ) AND ( o.is_ms_shipped = 0 ) AND /* ( LEFT( o.name, 2 ) Like 'sp' OR LEFT( o.name, 4 ) Like 'tmpA[0-9]' OR LEFT( o.name, 2 ) Like 'A[0-9]' OR LEFT( o.name, 2 ) Like 'P[0-9]' OR LEFT( o.name, 2 ) Like 'F[0-9]' OR LEFT( o.name, 2 ) Like 'T[0-9]' OR LEFT( o.name, 2 ) Like 'V[0-9]' ) AND */ ( o.name LIKE @ObjectName OR @ObjectName IS NULL ) ORDER BY SCHEMA_NAME( o.schema_id ), CASE o.type WHEN 'V' THEN 2 WHEN 'FN' THEN 3 WHEN 'IF' THEN 4 WHEN 'TF' THEN 5 WHEN 'P' THEN 6 WHEN 'TR' THEN 7 ELSE 9 END, o.name OPEN name_cursor FETCH NEXT FROM name_cursor INTO @schemaname, @id, @name, @Type DECLARE @C_F INT, @C_P INT, @C_TR INT, @C_V INT SELECT @C_F = 0, @C_P = 0, @C_TR = 0, @C_V = 0 DECLARE @drop_name nvarchar(256), @Is_name nvarchar(256) WHILE @@FETCH_STATUS = 0 BEGIN IF( @Type = 'P' ) BEGIN SELECT @C_P = @C_P + 1, @Is_name = 'OBJECTPROPERTY( object_id, N''IsProcedure'') = 1', @drop_name = 'PROCEDURE' END ELSE IF( @type = 'FN' OR @type = 'IF' OR @type = 'TF' ) BEGIN SELECT @C_F = @C_F + 1, @Is_name = 'OBJECTPROPERTY( object_id, N''IsTableFunction'') IS NOT NULL', @drop_name = 'FUNCTION' END ELSE IF( @type = 'TR' ) BEGIN SELECT @C_TR = @C_TR + 1, @Is_name = 'OBJECTPROPERTY( object_id, N''IsTrigger'') = 1', @drop_name = 'TRIGGER' END ELSE IF( @type = 'V' ) BEGIN SELECT @C_V = @C_V + 1, @Is_name = 'OBJECTPROPERTY( object_id, N''IsView'') = 1', @drop_name = 'VIEW' END IF( @Type <> 'U' ) BEGIN SELECT @schemaname = CASE @schemaname WHEN @default_schema_name THEN '' ELSE '[' + @schemaname + '].' END PRINT '/*----------------------------------------------------------*/' PRINT '/* ' + @schemaname + '[' + @name + ']' + space( 54 - 2 - LEN( @name ) ) + '*/' PRINT '/*----------------------------------------------------------*/' PRINT 'IF EXISTS ( SELECT 1 FROM sys.objects o WHERE object_id = object_id( N''' + @schemaname + '[' + @name + ']'' ) AND ' + @Is_name + ' )' PRINT 'DROP ' + @drop_name + ' ' + @schemaname + '[' + @name + ']' PRINT 'GO' --DECLARE @FirstLine nvarchar( 4000 ), -- @MidLine nvarchar( 4000 ), -- @ENDLine nvarchar( 4000 ) --SELECT @temp = '', -- @FirstLine = '', -- @MidLine = '', -- @ENDLine = '' SELECT @Text = [definition] FROM sys.sql_modules WHERE object_id = @id WHILE( CHARINDEX( ' ' + CHAR(13) + CHAR(10) + 'CREATE PROC', @Text ) > 0 ) BEGIN SELECT @Text = REPLACE( @Text, ' ' + CHAR(13) + CHAR(10) + 'CREATE PROC', 'CREATE PROC' ) END WHILE( CHARINDEX( ' ' + CHAR(13) + CHAR(10) + 'CREATE TRIGGER', @Text ) > 0 ) BEGIN SELECT @Text = REPLACE( @Text, ' ' + CHAR(13) + CHAR(10) + 'CREATE TRIGGER', 'CREATE TRIGGER' ) END WHILE( CHARINDEX( ' ' + CHAR(13) + CHAR(10) + 'CREATE FUNC', @Text ) > 0 ) BEGIN SELECT @Text = REPLACE( @Text, ' ' + CHAR(13) + CHAR(10) + 'CREATE FUNC', 'CREATE FUNC' ) END WHILE( CHARINDEX( ' ' + CHAR(13) + CHAR(10) + 'CREATE VIEW', @Text ) > 0 ) BEGIN SELECT @Text = REPLACE( @Text, ' ' + CHAR(13) + CHAR(10) + 'CREATE VIEW', 'CREATE VIEW' ) END declare @i int SELECT @pos = 1, @pos1 = 0, @i = 0 while( len( @Text ) > ( @i + 1 ) * 2000 ) begin select @pos1 = charindex( char(13) + char(10), @Text, ( @i + 1 ) * 2000 ) if( @pos > 1 ) begin select @pos = @pos + 1 end print substring( @Text, @pos, @pos1 - @pos ) select @i = @i + 1 --select @i, @pos , @pos1 select @pos = @pos1 + 1 end --select @i, @pos , @pos1 print substring( @Text, @pos, 2000 ) PRINT 'GO' END FETCH NEXT FROM name_cursor INTO @schemaname, @id, @name, @type END CLOSE name_cursor DEALLOCATE name_cursor SELECT @C_F AS [FUNC], @C_P AS [PROC], @C_TR AS [TRIG], @C_V AS [VIEW] SELECT schema_name( o.schema_id ), o.object_id, o.name, o.type, CASE o.type WHEN 'V' THEN 2 WHEN 'FN' THEN 3 WHEN 'IF' THEN 4 WHEN 'TF' THEN 5 WHEN 'P' THEN 6 WHEN 'TR' THEN 7 END as ListOrder FROM sys.all_objects o WHERE ( o.type IN ( 'P', 'FN', 'IF', 'TF', 'TR', 'V' ) ) AND ( o.is_ms_shipped = 0 ) AND /* ( LEFT( o.name, 2 ) Like 'sp' OR LEFT( o.name, 4 ) Like 'tmpA[0-9]' OR LEFT( o.name, 2 ) Like 'A[0-9]' OR LEFT( o.name, 2 ) Like 'P[0-9]' OR LEFT( o.name, 2 ) Like 'F[0-9]' OR LEFT( o.name, 2 ) Like 'T[0-9]' OR LEFT( o.name, 2 ) Like 'V[0-9]' ) AND */ ( o.name LIKE @ObjectName OR @ObjectName IS NULL ) ORDER BY SCHEMA_NAME( o.schema_id ), CASE o.type WHEN 'V' THEN 2 WHEN 'FN' THEN 3 WHEN 'IF' THEN 4 WHEN 'TF' THEN 5 WHEN 'P' THEN 6 WHEN 'TR' THEN 7 ELSE 9 END, o.name SET NOCOUNT OFF END GO
EXEC dbo.sp_TextFind @Text = N'%W1Wage%' -- nvarchar(512)數據庫
/*----------------------------------------------------------*/ /* [sp_TextFind] */ /*----------------------------------------------------------*/ IF EXISTS ( SELECT 1 FROM sys.objects o WHERE object_id = object_id( N'[sp_TextFind]' ) AND OBJECTPROPERTY( object_id, N'IsProcedure') = 1 ) DROP PROCEDURE [sp_TextFind] GO CREATE PROC [dbo].[sp_TextFind] ( @Text nvarchar(512) ) AS /* 功能:查找包含字符的數據庫對象 參數:@Text nvarchar(512) 要查找的字符串 返回:數據庫對象列表 */ BEGIN SET NOCOUNT ON SELECT sys.sysobjects.id, sys.sysusers.name, sys.sysobjects.name, sys.sysobjects.type, 'EXEC sp_TextGet ''' + sys.sysobjects.name + '''' AS SQL, sys.sysobjects.crdate, sys.sysobjects.refdate FROM sys.sysobjects, sys.sysusers WHERE sys.sysobjects.uid = sys.sysusers.uid and ( sys.sysobjects.type = 'U' and sys.sysobjects.id in ( SELECT id FROM sys.syscolumns WHERE sys.syscolumns.name like '%' + @Text + '%' ) or sys.sysobjects.type = 'P' and sys.sysobjects.id in ( SELECT id FROM sys.syscomments WHERE CHARINDEX( @Text, sys.syscomments.text ) > 0 ) or sys.sysobjects.type = 'IF' and sys.sysobjects.id in ( SELECT id FROM sys.syscomments WHERE CHARINDEX( @Text, sys.syscomments.text ) > 0 ) or sys.sysobjects.type = 'FN' and sys.sysobjects.id in ( SELECT id FROM sys.syscomments WHERE CHARINDEX( @Text, sys.syscomments.text ) > 0 ) or sys.sysobjects.type = 'TF' and sys.sysobjects.id in ( SELECT id FROM sys.syscomments WHERE CHARINDEX( @Text, sys.syscomments.text ) > 0 ) or sys.sysobjects.type = 'TR' and sys.sysobjects.id in ( SELECT id FROM sys.syscomments WHERE CHARINDEX( @Text, sys.syscomments.text ) > 0 ) or sys.sysobjects.type = 'V' and sys.sysobjects.id in ( SELECT id FROM sys.syscomments WHERE CHARINDEX( @Text, sys.syscomments.text ) > 0 ) ) ORDER BY sys.sysobjects.name, sys.sysobjects.type, sys.sysobjects.refdate, sys.sysobjects.crdate SET NOCOUNT OFF END GO
/*----------------------------------------------------------*/ /* [V0DataDict] */ /*----------------------------------------------------------*/ IF EXISTS ( SELECT 1 FROM sys.objects o WHERE object_id = object_id( N'[V0DataDict]' ) AND OBJECTPROPERTY( object_id, N'IsView') = 1 ) DROP VIEW [V0DataDict] GO CREATE VIEW [V0DataDict] AS SELECT TOP 100 PERCENT * FROM ( SELECT ISNULL( CAST( UserTable.value AS VARCHAR(256) ), '' ) AS 表名, REPLACE( REPLACE( REPLACE( CAST( UserTableColumn.value AS VARCHAR( 256) ), ' ', '' ), CHAR(13), '' ), CHAR( 10 ), '' ) AS 列名, UserTableColumn.colname AS 列編碼, CAST( UserTableColumn.colid AS VARCHAR(10) ) AS 列序, UserTableColumn.IsPKey AS 主鍵, UserTableColumn.typename AS 數據類型, CAST( UserTableColumn.length AS VARCHAR(10) ) AS 寬度, CASE WHEN UserTableColumn.typename NOT IN ( 'decimal', 'numeric', 'money', 'smallmoney', 'float', 'real' ) THEN '' ELSE CAST( ISNULL( UserTableColumn.scale, '' ) AS VARCHAR(10) ) END AS 小數位, CASE WHEN UserTableColumn.typename NOT IN ( 'decimal', 'numeric', 'money', 'smallmoney', 'float', 'real' ) THEN '' ELSE CAST( ISNULL( UserTableColumn.prec, '' ) AS VARCHAR(10) ) END AS 精度, ISNULL( CONVERT(VARCHAR(256), UserTableColumn.text), '' ) AS 默認值, ISNULL( CASE CONVERT( BIT, ( UserTableColumn.status & 8 ) ) WHEN 1 THEN '是' ELSE '' END, '' ) AS 可空, ISNULL( CASE CONVERT( BIT, ( UserTableColumn.status & 0x80 ) ) WHEN 1 THEN '是' ELSE '' END, '' ) AS 自增加, UserTable.name, 3 AS ListOrder, UserTableColumn.colid FROM ( select sys.sysobjects.id, sys.sysobjects.name, sys.extended_properties.value from sys.sysobjects left outer join sys.extended_properties on sys.extended_properties.major_id = sys.sysobjects.id and sys.extended_properties.minor_id = 0 WHERE sys.sysobjects.type = 'U' /*and convert( varchar(10), sys.sysobjects.crdate, 121 ) = convert( varchar(10), getdate(), 121 )*/ ) UserTable inner join ( select sys.syscolumns.id, sys.syscolumns.colid, sys.syscolumns.name as colname, sys.extended_properties.value, sys.systypes.name as typename , sys.syscolumns.length, sys.syscolumns.scale, sys.syscolumns.prec, sys.syscomments.text, sys.syscolumns.status, PKeyColumns.object_id, PKeyColumns.column_id, CASE WHEN PKeyColumns.column_id IS NULL THEN '' ELSE '是' END AS IsPKey from sys.syscolumns LEFT OUTER JOIN sys.syscomments ON sys.syscolumns.cdefault = sys.syscomments.id LEFT OUTER JOIN sys.systypes ON ( sys.syscolumns.usertype = sys.systypes.usertype ) and ( sys.syscolumns.xusertype = sys.systypes.xusertype ) LEFT OUTER JOIN sys.extended_properties on sys.extended_properties.major_id = sys.syscolumns.id and sys.extended_properties.minor_id = sys.syscolumns.colid LEFT OUTER JOIN ( SELECT sys.index_columns.object_id, sys.index_columns.column_id FROM sys.index_columns inner join sys.indexes on sys.indexes.index_id = sys.index_columns.index_id and sys.indexes.object_id = sys.index_columns.object_id WHERE sys.indexes.is_primary_key = 1 ) PKeyColumns ON PKeyColumns.object_id = sys.syscolumns.id and PKeyColumns.column_id = sys.syscolumns.colid ) UserTableColumn ON UserTableColumn.id = UserTable.id UNION ALL SELECT TOP 100 PERCENT '' AS 表名, ISNULL( CAST( sys.extended_properties.value AS VARCHAR(256) ), '' ) AS 列名, sys.sysobjects.name AS 列編碼, '' AS 列序, '' AS 主鍵, '' AS 數據類型, '' AS 寬度, '' AS 小數位, '' AS 精度, '' AS 默認值, '' AS 可空, '' AS 自增加, sys.sysobjects.name, 1 AS ListOrder, 0 as colid from sys.sysobjects left outer join sys.extended_properties on sys.extended_properties.major_id = sys.sysobjects.id and sys.extended_properties.minor_id = 0 WHERE sys.sysobjects.type = 'U' --and --convert( varchar(10), sys.sysobjects.crdate, 121 ) = convert( varchar(10), getdate(), 121 ) union all select TOP 100 PERCENT '表名' AS 表名, '列名' AS 列名, '列編碼' AS 列編碼, '列序' AS 列序, '主鍵' AS 主鍵, '數據類型' AS 數據類型, '寬度' AS 寬度, '小數位' AS 小數位, '精度' AS 精度, '默認值' AS 默認值, '可空' AS 可空, '自增加' AS 自增加, sys.sysobjects.name, 2 AS ListOrder, 0 as colid from sys.sysobjects left outer join sys.extended_properties on sys.extended_properties.major_id = sys.sysobjects.id and sys.extended_properties.minor_id = 0 WHERE sys.sysobjects.type = 'U' --and --convert( varchar(10), sys.sysobjects.crdate, 121 ) = convert( varchar(10), getdate(), 121 ) UNION ALL SELECT TOP 100 PERCENT '' AS 表名, '' AS 列名, '' AS 列編碼, '' AS 列序, '' AS 主鍵, '' AS 數據類型, '' AS 寬度, '' AS 小數位, '' AS 精度, '' AS 默認值, '' AS 可空, '' AS 自增加, sys.sysobjects.name, 4 AS ListOrder, 0 as colid FROM sys.sysobjects left outer join sys.extended_properties on sys.extended_properties.major_id = sys.sysobjects.id and sys.extended_properties.minor_id = 0 WHERE sys.sysobjects.type = 'U' /*and convert( varchar(10), sys.sysobjects.crdate, 121 ) = convert( varchar(10), getdate(), 121 ) */) A WHERE A.name LIKE '[A-Z][0-9]%' ORDER BY A.name ASC, A.ListOrder ASC, A.colid ASC GO