Thursday, 8 September 2016

sp_helptext for views

SELECT DEFINITION

FROM sys.sql_modules
WHERE object_id = OBJECT_ID('dw.v_hrg_v4_201213_Ip_Input')

Thursday, 4 August 2016

TSQL - Comparing DateTime

  Convert(varchar(6),dischargedate,112) between '201604' and '201703'

Wednesday, 20 July 2016

Tuesday, 19 July 2016

SQL Server - drop an index if exists

if exists (select name from sysindexes where name = 'pk_apc_scg')
  drop index tbl_apc_scg.pk_apc_scg

SQL Server - How to create a view with an index

Creating views with index

create view vw_ukhd_english_postcodes
WITH SCHEMABINDING as
  select
    Char_8_ASCII_Index
  from
    ODS.Postcode_Grid_Refs_Eng_Wal_Sco_And_NI_SCD
  where
    is_latest = 1
    and substring(country, 1,1) = 'E'

create unique clustered index pk_ukhd_country on vw_ukhd_english_postcodes(Char_8_ASCII_Index)

SQL Server - How to create a view with an index

Creating views with index

create view vw_ukhd_english_postcodes
WITH SCHEMABINDING as
  select
    Char_8_ASCII_Index
  from
    ODS.Postcode_Grid_Refs_Eng_Wal_Sco_And_NI_SCD
  where
    is_latest = 1
    and substring(country, 1,1) = 'E'

create unique clustered index pk_ukhd_country on vw_ukhd_english_postcodes(Char_8_ASCII_Index)

SQL Server - How to create a view with an index

Creating views with index

create view vw_ukhd_english_postcodes
WITH SCHEMABINDING as
  select
    Char_8_ASCII_Index
  from
    ODS.Postcode_Grid_Refs_Eng_Wal_Sco_And_NI_SCD
  where
    is_latest = 1
    and substring(country, 1,1) = 'E'

create unique clustered index pk_ukhd_country on vw_ukhd_english_postcodes(Char_8_ASCII_Index)

Wednesday, 6 July 2016

How to monitor backup and restore progress in SQL Server using TSQL

SELECT
  session_id as SPID,
  command,
  a.text AS Query,
  start_time,
  percent_complete,
  dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM
  sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE
  r.command in ('BACKUP DATABASE','RESTORE DATABASE')

Tuesday, 21 June 2016

SQL Server- List all tables with schema name for a given DB

SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']'
AS SchemaTable
FROM sys.tables

List of sobjects.xtype

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
----------------------------------------
AF: Aggregate function (CLR)
C: CHECK constraint
D: Default or DEFAULT constraint
F: FOREIGN KEY constraint
L: Log
FN: Scalar function
FS: Assembly (CLR) scalar-function
FT: Assembly (CLR) table-valued function
IF: In-lined table-function
IT: Internal table
P: Stored procedure
PC: Assembly (CLR) stored-procedure
PK: PRIMARY KEY constraint (type is K)
RF: Replication filter stored procedure
S: System table
SN: Synonym
SQ: Service queue
TA: Assembly (CLR) DML trigger
TF: Table function
TR: SQL DML Trigger
TT: Table type
U: User table
UQ: UNIQUE constraint (type is K)
V: View
X: Extended stored procedure

Monday, 22 February 2016

SQL Server - TSQL check the progress of restore and backup

The script below returns the progress of all backup and resotre sessions running.

SELECT session_id as SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')

Friday, 29 January 2016

MS SQL Server - How to determine the active node on a cluster server

How to determine the active node on a cluster server

Select ServerProperty('ComputerNamePhysicalNetBIOS')

Thursday, 28 January 2016

MS SQL Server - Configure and grant user access to xp_cmdshell

Configure  and grant user access to xp_cmdshell

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE

grant execute on xp_cmdshell to username

EXEC sp_xp_cmdshell_proxy_account 'username', 'password'

Tuesday, 26 January 2016

MS SQL Server - Shrinking transaction logs

Shrinking transaction logs

Run the script below to shrink the database's transaction log. Please note that logs should not really need to be shrank. If logs are not needed, on the database options set the database recovery model to simple this process (see below).

MS SQL Server 2005 

use database_name

backup log progress with truncate_only
dbcc shrinkfile ('transaction_logical_filename')


MS SQL Server 2008 and above

Microsoft SQL Server 2008 does not support the backup with truncate_only directive. So to truncate a log in 2008, run the following script.

BACKUP LOG database_name TO DISK='NULL'

Please endure that the database recovery model is set to full (see below) and a database full back up has been run.

Database option screen - opened by right clicking on the database, and selecting database options.




 



Monday, 25 January 2016

MS SQL Server - Chaning table's schema

Changing table schema 
ALTER SCHEMA schema_name TRANSFER schema_name.table_name;

MS SQL Server - How to reindex all tables within a database


MS SQL Server -  How to reindex all tables within a database

sp_msforeachtable 'dbcc dbreindex(''?'')'

Thursday, 21 January 2016

MS SQL Server - Moving temp DB location

Moving the temp DB location

The script below will move the temp db from its current location to the new location (highlighted). Please ensure you change the logical file name (also highlighted) .

use master
go
Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
go
Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
go


After running the above script you will need to restart the MS SQL Server Service for the changes to take effect.

Friday, 15 January 2016

MS SQL Server - Script all SQL Logins with their original passwords

MS SQL Server - Script all SQL Logins with their original passwords 

To script logins with their original password, follow these steps:

On server A, start SQL Server Management Studio, and then connect to the instance of SQL server from which you moved the database. Open a new Query Editor window, and then run the following script.

USE master
GO

IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
  DROP PROCEDURE sp_hexadecimal
GO

CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
GO

IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
  DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary  varbinary (256)
DECLARE @PWD_string  varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr  varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)

DECLARE @defaultdb sysname

IF (@login_name IS NULL)
  DECLARE login_curs CURSOR FOR

      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSE
  DECLARE login_curs CURSOR FOR


      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_curs

FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGIN
  PRINT 'No login(s) found.'
  CLOSE login_curs
  DEALLOCATE login_curs
  RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
WHILE (@@fetch_status <> -1)
BEGIN
  IF (@@fetch_status <> -2)
  BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr
    IF (@type IN ( 'G', 'U'))
    BEGIN -- NT authenticated account/group

      SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
    END
    ELSE BEGIN -- SQL Server authentication
        -- obtain password and sid
            SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
        EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
        EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT

        -- obtain password policy state
        SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
        SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name

            SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'

        IF ( @is_policy_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
        END
        IF ( @is_expiration_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
        END
    END
    IF (@denylogin = 1)
    BEGIN -- login is denied access
      SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
    END
    ELSE IF (@hasaccess = 0)
    BEGIN -- login exists but does not have access
      SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
    END
    IF (@is_disabled = 1)
    BEGIN -- login is disabled
      SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
    END
    PRINT @tmpstr
  END

  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
   END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO


Note This script creates two stored procedures in the master database. The procedures are named:


  • sp_hexadecimal 
  • sp_help_revlogin.


On the Source SQL Server instance, run the following statement:

EXEC sp_help_revlogin

The output script that the sp_help_revlogin stored procedure generates is the login script. This login script creates the logins that have the original Security Identifier (SID) and the original password.
On server B, start SQL Server Management Studio, and then connect to the instance of SQL Server to which you moved the database.

Open a new Query Editor window on the target SQL Server instance, and then run the output script.

Wednesday, 13 January 2016

MS SQL Server - Stored procedure or function change date

How to check date of last change in stored procedure or function in SQL server

SELECT name, create_date, modify_date
FROM sys.objects
WHERE type = 'P'

Tuesday, 12 January 2016

MS SQL Server - Script Object

The TSQL script below scripts up MyObjectName

sp_helptext  'MyObjectName'

MS SQL Server - Search for string in all stored procedures

The TSQL Script below will search all SPs within a database for MySearchString.

SELECT obj.Name SPName, sc.TEXT SPText
FROM sys.syscomments sc
INNER JOIN sys.objects obj ON sc.Id = obj.OBJECT_ID
WHERE sc.TEXT LIKE '%' + 'MySearchString' + '%'
AND TYPE = 'P'
GO