Update statistics for all tables in any DB

  • Comments posted to this topic are about the item Update statistics for all tables in any DB

    SQL DBA.

  • you can modify the following line to handle more naming possibilities on tables

    SET @Statement = 'UPDATE STATISTICS ' + '[' + @tablename + ']' + ' WITH FULLSCAN'

  • How would I modify the script to pass the owner.tablename?

  • If you do a SELECT * FROM information_schema.tables you'll see that there's a column there called TABLE_SCHEMA. That's where you'll find your dbo. I'm assuming you are wanting to handle other schemas that aren't dbo.

    Just modify the script so that you can pass TABLE_SCHEMA + TABLE_NAME.

  • Thanks for the prompt reply. I am new with the coding, this is what I have but I am hitting a road block.

    USE pubs

    GO

    SET NOCOUNT ON

    GO

    DECLARE updatestats CURSOR FOR

    SELECT table_schema, table_name FROM information_schema.tables

    where TABLE_TYPE = 'BASE TABLE'

    OPEN updatestats

    DECLARE @schema NVARCHAR(128)

    DECLARE @tablename NVARCHAR(128)

    DECLARE @Statement NVARCHAR(300)

    FETCH NEXT FROM updatestats INTO @tablename

    WHILE (@@FETCH_STATUS = 0)

    BEGIN

    PRINT N'UPDATING STATISTICS ' + @tablename

    SET @Statement = 'UPDATE STATISTICS ' + @tablename + ' WITH FULLSCAN'

    EXEC sp_executesql @Statement

    FETCH NEXT FROM updatestats INTO @tablename

    END

    CLOSE updatestats

    DEALLOCATE updatestats

    GO

    SET NO

    Msg 16924, Level 16, State 1, Line 10

    Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.

  • I normally do this sort of thing without a cursor while still using a loop but I don't have time to play with it right now.

    Since you mentioned being new, It helps when you post code on here to put the IFCode Shortcuts from the left of the messagebox around your code to format it.

    Doing it the same way you could do the following:

    SET NOCOUNT ON

    GO

    DECLARE updatestats CURSOR FOR

    SELECT table_schema, table_name

    FROM information_schema.tables

    where TABLE_TYPE = 'BASE TABLE'

    OPEN updatestats

    DECLARE @tableSchema NVARCHAR(128)

    DECLARE @tableName NVARCHAR(128)

    DECLARE @Statement NVARCHAR(300)

    FETCH NEXT FROM updatestats INTO @tableSchema, @tableName

    WHILE (@@FETCH_STATUS = 0)

    BEGIN

    PRINT N'UPDATING STATISTICS ' + '[' + @tableSchema + ']' + '.' + '[' + @tableName + ']'

    SET @Statement = 'UPDATE STATISTICS ' + '[' + @tableSchema + ']' + '.' + '[' + @tableName + ']' + ' WITH FULLSCAN'

    --PRINT @Statement

    EXEC sp_executesql @Statement

    FETCH NEXT FROM updatestats INTO @tableSchema, @tableName

    END

    CLOSE updatestats

    DEALLOCATE updatestats

    GO

    SET NOCOUNT OFF

    GO

    Also, have a look at this page for some of the normal maintenance procedures including another way of doing this.

  • That makes sense..Thanks! I appreciate your help.

    David

  • Technically the QUOTENAME() function should be considered for quoting schema and object names, such as

    EXEC ( '

    CREATE TABLE [#stupid[reallystupid]]tablename] (i int NOT NULL)

    SELECT * FROM [#stupid[reallystupid]]tablename]

    SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE ( TABLE_NAME LIKE N''%stupid%'' )

    ' )

    I also prefer cursor variables in scripts because they go away by themselves - if the script halts without explicitly deallocating, you don't have to fuss to get it to run again. Also table variables. But my example here, a temporary table declared inside dynamic SQL which runs as a separate batch, is a lazy way to get the same benefit - table goes away when execution halts for any reason.

    It also isn't an example to do with statistics, just a demonstration that objects can be given stupid names. This can happen if you have perversely motivated co-workers. The guy who mounts our server hardware likes to demonstrate his multilingual and multidisciplinary skill (exotic minerals? mythological characters in light opera? minor bodies of the outer solar system? some of which categories overlap, but thank god we closed our office in India), and our major databases, hundreds per server, all begin with a digit 0-9. We wear out more [ ] keys...

  • Thanks also for the hint about the IFCode Shortcuts on the left side of the editing pane. Had not noticed those but wondered how to people displayed the code nicely. I will make use of those in my future posts.

  • Hi Jason,

    For you have a similar one to update stats of all Dbs?

    Thanks.

  • Hi,

    i need code for need to identify the tables having regular updates on the database and it will automatically update the statistics of that tables.

Viewing 11 posts - 1 through 10 (of 10 total)

You must be logged in to reply to this topic. Login to reply