Hi glimbeek,
I edited the post above yours to contain the fixed syntax, thanks! I've since then got SQL installed on my local instance and did a little more querying. Is this closer to what you were looking for?
IF (SELECT COUNT(*) FROM SYS.OBJECTS WHERE NAME LIKE 'TopSQLforMSSQLMachine') = 1
DROP PROC TopSQLforMSSQLMachine
GO
-- TopSQLforMSSQLMachine PROC
--
-- RUN AS THE IGNITE REPO OWNER AND STORE UNDER THE IGNITE REPOS PROGRAMMABILITY STORED PROCS
-- PARMS '@FROM_DATE', '@TO_DATE', '@APPLICATIONSERV, '@MACHINENAME'
-- The @MACHINENAME can be found from the following query: Select CONN_HOST from cond.
-- The @APPLICATIONSERV can also be found from the following query: SELECT * FROM CONM_XX WHERE XX = ID of DBID you are investigating. (DBID = SELECT ID FROM COND)
--
-- EXAMPLE:
--
-- EXEC TopSQLforMSSQLMachine '2014-12-23 00:00','2014-12-30 00:00', 'APPLICATIONSERVERHERE', 'MACHINENAMEHERE'
-- EXEC TopSQLforMSSQLMachine '2014-07-01 00:00','2014-07-19 00:00', 'JSHAULIS-LT', 'JSHAULIS-LT\THEDB'
CREATE PROC [TopSQLforMSSQLMachine]
(@FROM_DATE VARCHAR(16), @TO_DATE VARCHAR(16), @APPLICATIONSERV VARCHAR(50), @MACHINENAME VARCHAR(50))
AS
BEGIN
DECLARE @HostGatheredCursorData TABLE(
Tablename nvarchar(100),
Hash_or_Name nvarchar(100),
Timesecs nvarchar(100),
Sqltext nvarchar(max)
);
DECLARE @ID nvarchar(1000);
DECLARE MachineGatherCursor CURSOR FAST_FORWARD FOR
SELECT ID FROM COND WITH (NOLOCK)
WHERE CONN_HOST = @MACHINENAME
OPEN MachineGatherCursor;
FETCH NEXT FROM MachineGatherCursor INTO @ID;
DECLARE @SQL NVARCHAR(MAX);
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL =
N'SELECT ' +
@ID + N',
ISNULL(N.NAME, SW.IZHO) HASH_OR_NAME,
SUM(SW.QP/100) TIMESECS,
ST.ST SQLTEXT ' +
'FROM CONSW_' + @ID + ' SW LEFT OUTER JOIN CON_SQL_NAME N ON SW.IZHO = N.HASH ' +
'LEFT OUTER JOIN CONM_' + @ID + ' MM ON SW.PWMY = MM.ID ' +
'LEFT OUTER JOIN CONST_' + @ID + ' ST ON SW.IZHO = ST.H ' +
'INNER JOIN CONU_' + @ID + ' U ON SW.XCUW = U.ID ' +
'WHERE SW.D BETWEEN ' +
'CONVERT(DATETIME,' + '''' + @FROM_DATE + '''' + ', 101) AND ' +
'CONVERT(DATETIME,' + '''' + @TO_DATE + '''' + ', 101) ' +
' AND MM.NAME = ''' + @APPLICATIONSERV + '''' +
' GROUP BY N.NAME, SW.IZHO, ST.ST
ORDER BY SUM(SW.QP/100) DESC'
INSERT INTO @HostGatheredCursorData
EXEC (@SQL)
FETCH NEXT FROM MachineGatherCursor INTO @ID;
END
CLOSE MachineGatherCursor;
DEALLOCATE MachineGatherCursor;
SELECT
COND.NAME AS "SQLInstance",
HGCD.Hash_Or_Name,
HGCD.TimeSecs,
HGCD.SQLText
FROM @HostGatheredCursorData AS HGCD
INNER JOIN COND ON COND.ID = HGCD.TABLENAME;
END