Tuesday, 18 October 2016
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')
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('dw.v_hrg_v4_201213_Ip_Input')
Thursday, 4 August 2016
Wednesday, 20 July 2016
SQL Server - Checking whether a temp table exists
IF OBJECT_ID('tempdb..#tmpTable1') IS NOT NULL
drop table tempdb..#tmpTable1
drop table tempdb..#tmpTable1
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
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)
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)
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)
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')
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
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
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
Tuesday, 1 March 2016
MS SQL Server - How to determine the active node on a cluster server
Select ServerProperty('ComputerNamePhysicalNetBIOS')
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')
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')
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'
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
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.
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:
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.
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'
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
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
Subscribe to:
Posts (Atom)
