Showing posts with label SQL Server. Show all posts
Showing posts with label SQL Server. Show all posts

Friday, 13 April 2012

How to associate all jobs to an operator ( base on their Job ID)

SQL : associate all jobs to an operator ( base on their Job ID)

use msdb
go


SELECT name ,
sql = '
EXEC msdb.dbo.sp_update_job @job_id=N''' +  convert(varchar(200), job_ID ) + ''',
              @notify_level_email=2,
              @notify_level_netsend=2,
              @notify_level_page=2,
              @notify_email_operator_name=N''SQLServerAlertMaint''

              go

              '

FROM dbo.sysjobs
order by  name
--WHERE program_name like 'SQLAgent - TSQL JobStep%'


What's the execute order of the different parts of a SQL select statement?

Monday, 27 September 2010

Search a text in stored procedure source code

use master
go


-- =============================================
-- Description: Search a text in stored procedure source code.
-- @text - any text to find, search is done by like '%text%'
-- @dbname - database where to search,
--         - if omitted, all databases in the SQL server instance
-- =============================================
alter PROCEDURE [dbo].[sp_FindTextInsideProcedure]
  @text varchar(250),
  @dbname varchar(64) = null ,
  @OrderByColumn int = 1 ,
  @Level int = null
AS BEGIN
SET NOCOUNT ON;

if ( @dbname is null or @dbname like '%[_]%' or @dbname like '%[%]%' ) and @Level is null
  begin
  /*
   -- cursor programming
  
    --enumerate all databases.
  DECLARE #db CURSOR FOR Select Name from master..sysdatabases where ( @dbname is null or Name like @dbname   )
  declare @c_dbname varchar(64)

     
  OPEN #db FETCH #db INTO @c_dbname
  while @@FETCH_STATUS <> -1 --and @MyCount < 500
   begin
     execute sp_FindTextInsideProcedure @text=@text, @dbname = @c_dbname
     FETCH #db INTO @c_dbname
   end 
  CLOSE #db DEALLOCATE #db
 
  */
      -- no cursor

      --enumerate all databases.
      Select Name
      into #db
      from master..sysdatabases
      where ( @dbname is null or Name like @dbname   )

      declare @c_dbname varchar(64)
      set @c_dbname = (select top 1 Name from #db)
      declare @result table ( db varchar(64) , name varchar(256) , [definition] nvarchar(max))

      while ( @c_dbname is not null )
      begin
            insert into @result
            execute sp_FindTextInsideProcedure @text=@text, @dbname = @c_dbname , @Level =1

            delete #db
            where name = @c_dbname

            -- get the next database name
            set @c_dbname = (select top 1 Name from #db)
      end 

      drop table #db
      select * from @result r
      order by case @OrderByColumn
                              when 1 then r.db
                              when 2 then r.name 
                              when 3 then r.[definition] 
                              else  r.db
                  end
     
end --if @dbname is null
else
begin --@dbname is not null
  declare @sql varchar(4000)
  --create the find like command
  select @sql = 'select ''' + @dbname + ''' as db, o.name,m.definition '
                        + ' from ['+@dbname+'].sys.sql_modules m '
                        + ' inner join ['+@dbname+']..sysobjects o '
                        + '         on m.object_id=o.id'
                        + ' where [definition] like ''%'+@text+'%'''
  if (@Level is null)
  begin
      select @sql = @sql + 'order by case ' + convert(varchar , @OrderByColumn ) 
                        + '                     when 1 then ''' + @dbname + ''''
                        + '                     when 2 then  o.name  '
                        + '                     when 3 then m.definition  '
                        + '                     else   ''' + @dbname + ''''
                        + '         end'
  end
  execute (@sql)
end --@dbname is not null
END



Wednesday, 22 September 2010

3 ways to Generate random password on SQL SERVER 2005 & 2008

Best WAY :

select LOWER(left(newid(),8) ) + LOWER(right(newid(),8) )
or just
select LOWER(left(newid(),8) )
OR
select left(newid(),8)




Second Way:

CREATE PROC spGeneratePassword
AS

DECLARE @RandomNumber float
DECLARE @RandomInteger int
DECLARE @MaxValue int
DECLARE @MinValue int

DECLARE @i AS INT
DECLARE @Password AS VARCHAR(10)
SET @Password = ''

SET @MaxValue = 26
SET @MinValue = 1

SET @i = 3

WHILE(@i>0)
BEGIN
      SET @i = @i -1
      select @RandomNumber = RAND()
      set @RandomInteger = ((@MaxValue + 1) - @MinValue) * @RandomNumber + @MinValue
      SET @Password = @Password + CHAR(96 + @RandomInteger)
END


SET @MaxValue = 9
SET @MinValue = 1

SET @i = 2

WHILE(@i>0)
BEGIN
      SET @i = @i -1
      select @RandomNumber = RAND()
      set @RandomInteger = ((@MaxValue + 1) - @MinValue) * @RandomNumber + @MinValue
      SET @Password = @Password + CHAR(48 + @RandomInteger)
END


SET @MaxValue = 26
SET @MinValue = 1

SET @i = 3

WHILE(@i>0)
BEGIN
      SET @i = @i -1
      select @RandomNumber = RAND()
      set @RandomInteger = ((@MaxValue + 1) - @MinValue) * @RandomNumber + @MinValue
      SET @Password = @Password + CHAR(96 + @RandomInteger)
END

select @Password AS 'Password'







Third way  ( just generate 150 password ):


INSERT INTO
dbo.attendee_users (password)
SELECT a.A + b.B + c.C + d.D AS Password
FROM
  (SELECT 'a' AS A
   UNION
   SELECT 'r'
   UNION
   SELECT 'i') a
 CROSS JOIN
  (SELECT '5' AS B
   UNION
   SELECT '2'
   UNION
   SELECT '19'
   UNION
   SELECT '4'
   UNION
   SELECT '87a3') b
 CROSS JOIN
  (SELECT 'vgh' AS C
   UNION
   SELECT '8R7y') c
 CROSS JOIN
  (SELECT '6' AS D
   UNION
   SELECT '7'
   UNION
   SELECT '8'
   UNION
   SELECT '9'
   UNION
   SELECT '1') d