Sunday, 23 April 2017

Detach Multiple Database In Sql Server

USE MASTER 
DECLARE DATABASES CURSOR
FOR
    SELECT  NAME
    FROM    SYSDATABASES
    WHERE   NAME NOT IN ( 'MASTER', 'TEMPDB', 'MSDB', 'MODEL' ) 
DECLARE @DB SYSNAME 

DECLARE @SQL VARCHAR(5000) 
OPEN DATABASES 

FETCH NEXT FROM DATABASES INTO @DB 
WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @SQL = 'SP_DETACH_DB ' + @DB 
        EXEC (@SQL) 
        FETCH NEXT FROM DATABASES INTO @DB 

    END 
CLOSE DATABASES 
DEALLOCATE DATABASES  

Friday, 21 April 2017

Find Row Count Of Tables Based On Cursor

DECLARE @TName VARCHAR(MAX); 
DECLARE @Cnt VARCHAR(MAX); 
DECLARE TABLENAME CURSOR
FOR
    SELECT  TNAME
    FROM    TABLENAME
    WHERE   TYPE = 'L'; 

OPEN TABLENAME; 

FETCH NEXT FROM TABLENAME INTO @TName; 

WHILE @@FETCH_STATUS = 0
    BEGIN 
        SET NOCOUNT ON; 

        SELECT  @Cnt = COUNT(*)
        FROM    INFORMATION_SCHEMA.COLUMNS
        WHERE   TABLE_NAME = @TName; 

        PRINT 'Table : ' + @TName + ' (' + @Cnt + ')'; 

        FETCH NEXT FROM TABLENAME INTO @TName; 
    END;

CLOSE TABLENAME; 
DEALLOCATE TABLENAME; 

Working With The TRY…CATCH Block in Sql Server

DECLARE @COLUMNID INT ,
              @COLUMNNAME INT;

BEGIN
    BEGIN TRY
        BEGIN TRANSACTION;
        UPDATE  TABLENAME
        SET     COLUMNNAME = @COLUMNNAME
        WHERE   COLUMNID = @COLUMNID;
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION;
        DECLARE @ErrorNumber INT = ERROR_NUMBER();
        DECLARE @ErrorLine INT = ERROR_LINE();
        DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE();
        DECLARE @ErrorSeverity INT = ERROR_SEVERITY();
        DECLARE @ErrorState INT = ERROR_STATE();

        PRINT 'Actual Error Number: ' + CAST(@ErrorNumber AS VARCHAR(10));
        PRINT 'Actual Line Number: ' + CAST(@ErrorLine AS VARCHAR(10));

        RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
    END CATCH;
END;
GO

Return Custom Error Message

DECLARE @CustomErrorString VARCHAR(100),
        @Value             INT = 5;

IF @Value >= 5
  BEGIN
      SET @CustomErrorString = 'Value Is Greater Than or Equal To '
                               + CONVERT(VARCHAR(10), @Value);

      RAISERROR (@CustomErrorString,10,1,50,50);

      RETURN; --Exit Now
  END; 

Drop All The Stored Procedure From SQL Server Database Without Using Enterprise Manager

SELECT 'DROP PROCEDURE [' + SCHEMA_NAME(schema_id) + '].[' + name + ']'
FROM SYS.PROCEDURES
ORDER BY NAME

Thursday, 16 March 2017

Rebuild All Indexes For All Tables And All Databases

DECLARE @DATABASE VARCHAR(255)   
DECLARE @TABLE VARCHAR(255)  
DECLARE @CMD NVARCHAR(500)  
DECLARE @FILLFACTOR INT 

SET @FILLFACTOR = 90 

DECLARE DATABASECURSOR CURSOR FOR  
SELECT NAME FROM MASTER.DBO.SYSDATABASES   
WHERE NAME NOT IN ('MASTER','MODEL','MSDB','TEMPDB')   
ORDER BY 1  

OPEN DATABASECURSOR  

FETCH NEXT FROM DATABASECURSOR INTO @DATABASE  
WHILE @@FETCH_STATUS = 0  
BEGIN  

SET @CMD = 'DECLARE TABLECURSOR CURSOR FOR SELECT ''['' + TABLE_CATALOG + ''].['' + TABLE_SCHEMA + ''].['' + 
TABLE_NAME + '']'' AS TABLENAME FROM [' + @DATABASE + '].INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = ''BASE TABLE'''   

   EXEC (@CMD)  
   OPEN TABLECURSOR   

   FETCH NEXT FROM TABLECURSOR INTO @TABLE   
   WHILE @@FETCH_STATUS = 0   
   BEGIN   

       IF (@@MICROSOFTVERSION / POWER(2, 24) >= 9)
       BEGIN
           -- SQL 2005 OR HIGHER COMMAND 
           SET @CMD = 'ALTER INDEX ALL ON ' + @TABLE + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@FILLFACTOR) + ')' 
  --EXEC (@CMD) 
           PRINT (@CMD) 
       END
       ELSE
       BEGIN
          -- SQL 2000 COMMAND 
          DBCC DBREINDEX(@TABLE,' ',@FILLFACTOR)  
       END

       FETCH NEXT FROM TABLECURSOR INTO @TABLE   
   END   

   CLOSE TABLECURSOR   
   DEALLOCATE TABLECURSOR  

   FETCH NEXT FROM DATABASECURSOR INTO @DATABASE  
END  

CLOSE DATABASECURSOR   
DEALLOCATE DATABASECURSOR