/****** Object: StoredProcedure [dbo].[p_UTIL_FindFields] Script Date: 26-Jun-14 12:16:05 ******/
/* Written by Lars Fosdal, http://plus.lars.fosdal.com */
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[p_UTIL_FindFields]
( @Name NVARCHAR(255),
@Value NVARCHAR(255),
@Verbose BIT = 0
)
AS
BEGIN
PRINT N'[dbo].[p_UTIL_FindFields] @Name = N''' + @NAME + ''', @Value = N''' + @Value + ''''
Print 'Finding Fields with names like ' + @Name + ' where value = ' + @Value
DECLARE @iCount int
DECLARE @iTables int = 0
DECLARE @iErrors int = 0
DECLARE @sSQL NVARCHAR(MAX)
DECLARE @sSQLParams NVARCHAR(255)
DECLARE @sColName NVARCHAR(255)
DECLARE @sTableName NVARCHAR(255)
DECLARE sTableList CURSOR FOR
SELECT c.name AS ColName, t.name AS TableName
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE @Name
OPEN sTableList
FETCH NEXT FROM sTableList
INTO @sColName, @sTableName
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Verbose = 1 PRINT @sTableName + '.' + @sColName
SET @sSQL = 'select @countOut = count(*) from ' + @sTableName + ' where ' + @sColName + ' = ' + @Value;
SET @sSQLParams = N'@countOut int OUTPUT';
BEGIN TRY
SET @iTables = @iTables + 1
EXECUTE sp_executesql @sSQL, @sSQLParams, @countOut = @iCount OUTPUT;
IF @iCount > 0 PRINT @sSQL + ' returns ' + Convert(nvarchar(50), @iCount)
END TRY
BEGIN CATCH
IF @Verbose = 1 PRINT N'Not testable'
SET @iErrors = @iErrors + 1
END CATCH
FETCH NEXT FROM sTableList
INTO @sColName, @sTableName
END
PRINT N'Checked ' + Convert(nvarchar(50), @iTables) + ' table and column combos with ' + Convert(nvarchar(50), @iErrors) + ' errors'
CLOSE sTableList
DEALLOCATE sTableList
END
Comments