Solved

SQL SERVER 2008 R2 CURSOR ERROR

Posted on 2013-01-16
5
888 Views
Last Modified: 2013-02-10
Hi,

Every body , I'm fighting against an script in sql server 2008. The script is for a REBUILD, and will be included in a sql job.  Trying to include the parameter WITH (SORT_IN_TEMPDB = ON) but I get an error. It might be because of concatenate incorrectly. I would thank you your help. Three hours and not advance.

The section of code:


SELECT  
        db_name(database_id) database_name, s.name schema_name, t.name table_name, i.name index_name
        , dt.avg_fragmentation_in_percent, dt.avg_page_space_used_in_percent, page_count, record_count, fragment_count
        ,      case
                when ( avg_page_space_used_in_percent < ' + convert(char(3),@min_fill_rebuild) +
    '                        or   avg_fragmentation_in_percent > ' + convert(char(3),@min_frag_rebuild) +                  
    ') then ''ALTER INDEX '' + QUOTENAME(i.name)+ '' ON '+ QUOTENAME(@database_name) + '.'' + QUOTENAME(s.name) +''.''+ QUOTENAME(t.name) +'' REBUILD '' + '' WITH

(SORT_IN_TEMPDB = ON) ''  
                else ''ALTER INDEX '' + QUOTENAME(i.name)+ '' ON '+ QUOTENAME(@database_name) + '.'' + QUOTENAME(s.name) +''.''+ QUOTENAME(t.name) +'' REBUILD '' + '' WITH
(SORT_IN_TEMPDB = ON) ''

The thing is I get an error " Executed as user: NT AUTHORITY\SYSTEM. Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153)  Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon. [SQLSTATE 42000] (Error 319).  The step failed."


Any idea? this script without    + '' WITH
(SORT_IN_TEMPDB = ON) '' work correctly
0
Comment
Question by:projectja
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 12

Expert Comment

by:HugoHiasl
ID: 38785108
Null Value is eliminated is normally a pointer that a MIN(), MAX() or other aggregate function was executed on data that contained NULLs...

The other problem could be caused by the last line of the statement:

''ALTER INDEX '' + QUOTENAME(i.name)+ '' ON '+ QUOTENAME(@database_name) + '.'' + QUOTENAME(s.name) +''.''+ QUOTENAME(t.name) +''  REBUILD '' + '' WITH (SORT_IN_TEMPDB = ON) ''

Are you sure what you are doing with single an double quotes?

'ALTER INDEX ' [your_i_name] ' ON [your_db_name] .'[your_s_name]'.'[your_t_name]' REBUILD '' WITH (SORT_IN_TEMPDB = ON)'

This looks strange. I think you used "QUOTENAME" which quoted the table and schema name for you and added accidentially additional apostrophs to the quotes.
0
 
LVL 12

Expert Comment

by:HugoHiasl
ID: 38785133
You are also missing the

END

for the CASE WHEN.... END

And this is what I assume that you wanted to do with your concatenation (untested)

 ''ALTER INDEX ' + QUOTENAME(i.name)+ ' ON '+ QUOTENAME(@database_name) + '.' + QUOTENAME(s.name) +'.'+ QUOTENAME(t.name) +' REBUILD WITH (SORT_IN_TEMPDB = ON) ''  
                else ''ALTER INDEX ' + QUOTENAME(i.name)+ ' ON '+ QUOTENAME(@database_name) + '.' + QUOTENAME(s.name) +'.'+ QUOTENAME(t.name) +' REBUILD WITH (SORT_IN_TEMPDB = ON) ''
0
 

Author Comment

by:projectja
ID: 38785197
Hi,

atached the image showing single quotes, I am not sure if it is right


Hugo,

yes  I have END seccion


   )
    SELECT  
        db_name(database_id) database_name, s.name schema_name, t.name table_name, i.name index_name
        , dt.avg_fragmentation_in_percent, dt.avg_page_space_used_in_percent, page_count, record_count, fragment_count
        ,      case
                when ( avg_page_space_used_in_percent < ' + convert(char(3),@min_fill_rebuild) +
    '                        or   avg_fragmentation_in_percent > ' + convert(char(3),@min_frag_rebuild) +                  
    ') then ''ALTER INDEX '' + QUOTENAME(i.name)+ '' ON '+ QUOTENAME(@database_name) + '.'' + QUOTENAME(s.name) +''.''+ QUOTENAME(t.name) + '' REBUILD WITH (SORT_IN_TEMPDB = ON)  ''
                else ''ALTER INDEX '' + QUOTENAME(i.name)+ '' ON '+ QUOTENAME(@database_name) + '.'' + QUOTENAME(s.name) +''.''+ QUOTENAME(t.name)  + '' REBUILD WITH (SORT_IN_TEMPDB = ON)  ''
            end SENTENCIA_RECOMENDADA
EXCHANGE.png
0
 
LVL 12

Accepted Solution

by:
HugoHiasl earned 500 total points
ID: 38785238
Why are you using duplicate single quotes?

A duplicate single quote is used to escape a single quote within a string with out ending the string.

Use single quotes. Only at the start and end of the string it could make sense if you want a string as return value.
0
 

Author Closing Comment

by:projectja
ID: 38873036
Thanks guy,  I solved the problem with your indication
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

INTRODUCTION: While tying your database objects into builds and your enterprise source control system takes a third-party product (like Visual Studio Database Edition or Red-Gate's SQL Source Control), you can achieve some protection using a sing…
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question