Click here to Skip to main content
16,005,682 members
Home / Discussions / Database
   

Database

 
QuestionStored procedures ----> where do I save it Pin
intrigued4-Feb-06 8:37
intrigued4-Feb-06 8:37 
AnswerRe: Stored procedures ----> where do I save it Pin
Colin Angus Mackay4-Feb-06 9:06
Colin Angus Mackay4-Feb-06 9:06 
QuestionInsert Query -----> for datetime data type on sql server 2005 Pin
intrigued4-Feb-06 8:29
intrigued4-Feb-06 8:29 
AnswerRe: Insert Query -----> for datetime data type on sql server 2005 Pin
Colin Angus Mackay4-Feb-06 9:11
Colin Angus Mackay4-Feb-06 9:11 
QuestionAdd two columen Pin
webhay4-Feb-06 7:30
webhay4-Feb-06 7:30 
AnswerRe: Add two columen Pin
Colin Angus Mackay4-Feb-06 12:39
Colin Angus Mackay4-Feb-06 12:39 
Questionrestore a .dbf file Pin
cristina_tudor4-Feb-06 7:07
cristina_tudor4-Feb-06 7:07 
QuestionList usage of any object in any DB on Server Pin
OMalleyW4-Feb-06 6:25
OMalleyW4-Feb-06 6:25 
Hello,
I posted this over at sqlserverentral.com but have not had any reply's.
If you are a member here is the link:
Code[^]


What this will do:
Allows you to show the usage of any table, procedure, column, or view in any database on the server where the code is running.

Example:
exec spFindObjectUsage 'MyTableOfParts'
This will return all the views and procedures that call out MyTableOfParts.


Here is the code:
 <br />
<br />
CREATE PROCEDURE spFindObjectUsage<br />
 @ObjectToFind	NVARCHAR(100) = ''<br />
,@ResultMessage	VARCHAR(200) = '' OUTPUT<br />
AS<br />
DECLARE<br />
	 @ReturnCode		INT<br />
	,@StringToExecute	NVARCHAR(1500)<br />
	,@DBToProcess		INT<br />
	,@ServerName		VARCHAR(200)<br />
	,@TableWithServer	VARCHAR(200)<br />
	,@NameOfDatabase	VARCHAR(50)<br />
--<br />
DECLARE	@ServerDatabaseTables TABLE<br />
(TempTblID	INT NOT NULL IDENTITY(1,1)<br />
,DBName		VARCHAR(100) NOT NULL DEFAULT ''<br />
,Processed	BIT NOT NULL DEFAULT 0)<br />
--<br />
CREATE TABLE #ServerDatabaseObjectUsage <br />
(UsageID		INT NOT NULL IDENTITY(1,1)<br />
,DBName			VARCHAR(100) NOT NULL DEFAULT ''<br />
,ObjectUsedIn		VARCHAR(200) NOT NULL DEFAULT ''<br />
,TypeOfObject		VARCHAR(50)  NOT NULL DEFAULT ''<br />
,IsColumnOfTable 	BIT NOT NULL DEFAULT 0)<br />
--<br />
-- first get all the databases on the current server<br />
--<br />
INSERT INTO @ServerDatabaseTables<br />
	(DBName)<br />
SELECT<br />
	name<br />
FROM master.dbo.sysdatabases<br />
--<br />
SET @TableWithServer = ''<br />
SET @NameOfDatabase  = ''<br />
--<br />
SET NOCOUNT ON<br />
-- each database has it's own listing of System Objects so inorder to get<br />
-- a correct listing we will need to go through every database.<br />
-- the only way I know to do this is using sqlexec.<br />
-- I know it is not the best way but we will need the ability to dynamically<br />
-- tell the query what system tables to use. Ex: master.dbo.systemobjects or production.dbo.systemobjects...ect<br />
WHILE EXISTS(SELECT * FROM @ServerDatabaseTables WHERE Processed = 0) BEGIN<br />
	SET @DBToProcess = (SELECT MIN(TempTblID) FROM @ServerDatabaseTables WHERE Processed = 0)<br />
	--<br />
	SELECT   @ServerName 	  = DBName + '.dbo.'<br />
		,@NameOfDatabase  = DBName<br />
	FROM @ServerDatabaseTables<br />
	WHERE TempTblID = @DBToProcess<br />
	--<br />
	SET @StringToExecute =  'INSERT INTO #ServerDatabaseObjectUsage ' +<br />
			        '(DBName' +<br />
				',ObjectUsedIn' +<br />
				',TypeOfObject' + <br />
				',IsColumnOfTable) ' +<br />
				'SELECT DISTINCT ' +<br />
				char(39)+@NameOfDatabase+char(39)+ <br />
				',obj.NAME' + <br />
				',(CASE obj.XTYPE  WHEN ' + char(39) + 'P' + char(39) + <br />
						 ' THEN ' + char(39) + 'PROCEDURE' + char(39) +<br />
						 ' WHEN ' + char(39) + 'V' + char(39) + <br />
						 ' THEN ' + char(39) + 'VIEW' + char(39) +<br />
						 ' WHEN ' + char(39) + 'U' + char(39) + <br />
						 ' THEN ' + char(39) + 'USER TABLE' + char(39) +<br />
						 ' WHEN ' + char(39) + 'D' + char(39) + <br />
						 ' THEN ' + char(39) + 'DEFAULT CONSTRAINT' + char(39) +<br />
						 ' WHEN ' + char(39) + 'F' + char(39) + <br />
						 ' THEN ' + char(39) + 'FOREIGN KEY' + char(39) +<br />
						 ' WHEN ' + char(39) + 'IF' + char(39) + <br />
						 ' THEN ' + char(39) + 'INLINE TABLE OR FUNCTION' + char(39) +<br />
						 ' WHEN ' + char(39) + 'FN' + char(39) + <br />
						 ' THEN ' + char(39) + 'SCALAR FUNCTION' + char(39) +<br />
						 ' WHEN ' + char(39) + 'TF' + char(39) + <br />
						 ' THEN ' + char(39) + 'TABLE FUNCTION' + char(39) +<br />
						 ' ELSE CAST( ' + char(39) + 'UNKNOWN TYPE ' + char(39) + ' + obj.XTYPE AS VARCHAR(50)) END)' +<br />
				',(CASE WHEN (SELECT count(*) FROM '+@ServerName+'syscolumns where name='+char(39)+@ObjectToFind+char(39) + ') > 0 ' +<br />
					'THEN 1 ELSE 0 END)' + <br />
				'FROM ' + @ServerName + 'sysobjects as obj ' + <br />
				'LEFT JOIN ' + @ServerName + 'syscomments as helpText ON obj.ID = helpText.ID ' + <br />
				'LEFT JOIN ' + @ServerName + 'syscolumns as syscol ON syscol.ID = obj.ID ' + <br />
				'WHERE helpText.Text LIKE ' + char(39) + '%' + ltrim(rtrim(@ObjectToFind)) + '%' + char(39) + <br />
				' OR syscol.name LIKE '  + char(39) + '%' + ltrim(rtrim(@ObjectToFind)) + '%' + char(39) + <br />
				' ORDER BY obj.name '<br />
	SET @StringToExecute = LTRIM(RTRIM(@StringToExecute))<br />
	PRINT LEN(@StringToExecute)<br />
	--<br />
	exec sp_executesql @StringToExecute<br />
	--<br />
	IF (@@ERROR != 0) BEGIN<br />
		SET @ReturnCode = 1<br />
		GOTO END_PROCEDURE<br />
	END<br />
	--<br />
	UPDATE @ServerDatabaseTables<br />
	SET Processed = 1<br />
	WHERE TempTblID = @DBToProcess<br />
END<br />
--<br />
SELECT * FROM #ServerDatabaseObjectUsage<br />
--<br />
DROP TABLE #ServerDatabaseObjectUsage<br />
--<br />
SET @ReturnCode = 0<br />
<br />
END_PROCEDURE:<br />
	IF (@ReturnCode != 0) BEGIN<br />
		SET @ResultMessage = 'A NON ZERO Return code has occured, Please investigate this problem ' + CAST(@ReturnCode AS VARCHAR(2))<br />
	END ELSE BEGIN<br />
		SET @ResultMessage = 'OK'<br />
	END<br />
RETURN @ReturnCode<br />


I am looking for feed back on the code:
If you like it?
Is there a better way to do this?
And any other comments or suggestions are welome.

Please let me know,

William O'Malley

I hate users. Not all of them, just the ones who talk.CP member: Al Einstien
AnswerHay Colin Pin
OMalleyW6-Feb-06 10:32
OMalleyW6-Feb-06 10:32 
QuestionHelp with simple DataGrid.... Pin
thebison4-Feb-06 4:43
thebison4-Feb-06 4:43 
AnswerRe: Help with simple DataGrid.... Pin
intrigued4-Feb-06 8:34
intrigued4-Feb-06 8:34 
QuestionAdministrator Pin
D.N.3-Feb-06 7:06
D.N.3-Feb-06 7:06 
AnswerRe: Administrator Pin
Dave Kreskowiak3-Feb-06 13:49
mveDave Kreskowiak3-Feb-06 13:49 
QuestionRecordset AddNew fails Pin
RadioOpa3-Feb-06 2:13
RadioOpa3-Feb-06 2:13 
QuestionMulti table queries Pin
myNameIsRon2-Feb-06 21:11
myNameIsRon2-Feb-06 21:11 
AnswerRe: Multi table queries Pin
Rana Muhammad Javed Khan2-Feb-06 21:15
Rana Muhammad Javed Khan2-Feb-06 21:15 
GeneralRe: Multi table queries Pin
myNameIsRon3-Feb-06 5:15
myNameIsRon3-Feb-06 5:15 
AnswerRe: Multi table queries Pin
Colin Angus Mackay2-Feb-06 22:48
Colin Angus Mackay2-Feb-06 22:48 
GeneralRe: Multi table queries Pin
myNameIsRon3-Feb-06 5:16
myNameIsRon3-Feb-06 5:16 
AnswerRe: Multi table queries Pin
Sri Vidhya3-Feb-06 21:58
Sri Vidhya3-Feb-06 21:58 
GeneralRe: Multi table queries Pin
myNameIsRon4-Feb-06 5:20
myNameIsRon4-Feb-06 5:20 
QuestionThis beginner needs some HELP with SQL Registration Pin
alexvw2-Feb-06 12:25
alexvw2-Feb-06 12:25 
AnswerRe: This beginner needs some HELP with SQL Registration Pin
Mike Dimmick4-Feb-06 4:57
Mike Dimmick4-Feb-06 4:57 
QuestionNeed help for sql ASAP Phuleez Pin
Minoo S2-Feb-06 10:29
Minoo S2-Feb-06 10:29 
AnswerRe: Need help for sql ASAP Phuleez Pin
Colin Angus Mackay2-Feb-06 10:59
Colin Angus Mackay2-Feb-06 10:59 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.