I am using a EXEC inside of a WHILE LOOP. It works fine until looping up to 10x. After that, I was able to track down that it stalls at EXEC. Is this a buffer issue and how would I clear it?
Thanks
I am using a EXEC inside of a WHILE LOOP. It works fine until looping up to 10x. After that, I was able to track down that it stalls at EXEC. Is this a buffer issue and how would I clear it?
Thanks
You would have to post the code. There are many reason why it might "stall".
Hi, here is a simplified version of the code. It is stalling on EXEC statement after it loops up to 11x. There is a total of 21 counts in the @tblSQL table.
WHILE EXISTS (SELECT 1 FROM @tblSQL WHERE ISNULL(Execstatus, 0) = 0)
BEGIN
SELECT TOP 1
@tmpTblname = ObjectName
, @strSQL_NVAR_MAX = SQLStatement
FROM @tblSQL
WHERE ISNULL(Execstatus, 0) = 0
UPDATE @tblSQL
SET Execstatus = 1
WHERE ObjectName = @tmpTblname
BEGIN
------------------------------------------------------------
IF OBJECT_ID('tempdb..##GlobalTEMPTable') IS NOT NULL
--IF OBJECT_ID('SearchTMP','U') IS NOT NULL
BEGIN
DROP TABLE ##GlobalTEMPTable
--DROP TABLE SearchTMP
END
------------------------------------------------------------
--PRINT @strSQL_NVAR_MAX
EXEC(@strSQL_NVAR_MAX)
IF EXISTS(SELECT 1 FROM ##GlobalTEMPTable)
--IF EXISTS(SELECT 1 FROM SearchTMP)
BEGIN
SELECT ObjectName=@tmpTblname, * FROM ##GlobalTEMPTable
--SELECT ObjectName=@tmpTblname,* FROM SearchTMP
SELECT @blnMatchFound = 1
END
DROP TABLE ##GlobalTEMPTable
END
END
And what values are in @strSQL_NVAR_MAX that are being executed?
sorry. It is like:
SELECT * INTO ##GlobalTEMPTable FROM Dynamic_Table_N
I have also tried it with
OPTION (OPTIMIZE FOR UNKNOWN)
OPTION (RECOMPILE)
at the end of
SELECT * INTO ##GlobalTEMPTable FROM Dynamic_Table_N
First thing I might try is wrapping all of the insert/updates including the exec in begin transaction / commit transaction
so what is the story behind this ? What are you attempting to do in plain English without code?
BTrimPop, yes, I have tried that too.
Yosiasz, in plain English, I am doing a search for a value on all columns per table (loop). There are a total of 21 tables and it works as plan up to looping 11 times.
I am assuming it has to be a cache issue or some sort.
The same code worked fine on another database but for this database, it is bigger.
in one database?
Correct! One database, not at server level of all databases.
how about this using sys objects
use yourDatabase
go
select 'select * from ' + t.name + ' where ' + c.name + ' like ''%chicken%'''
from sys.tables t join sys.columns c on t.object_id = c.object_id
then use the result of the query result first column
Yes, I did something like that but I had to loop through each table with a where clause. For that reason, I had to use the EXEC in a loop.
I did add these two and it seems to get me a bit further in the loop.
DBCC DropCleanBuffers
DBCC FREEPROCCACHE
Still not complete and very slow after loop #12.
what I posted has a where clause. Is this something you run often or is this a one time thing?
Try this then
select 'select ''' + t.name + ''' from ' + t.name + ' where ' + c.name + ' like ''%chicken%'' union all'
from sys.tables t join sys.columns c on t.object_id = c.object_id
Yosiasz, this is an on-going run.
with your above statement, do I still use it with EXEC?
Also, it seems it might be the database. I used my code in several databases now and it is running fine. Maybe it is an index thing on one of the tables.