Saturday, 21 March 2015

LogParser


Download Link:

 

http://www.microsoft.com/en-gb/download/details.aspx?id=24659

 

Study Materials:

https://sqlbits.com/Sessions/Event9/LogParser-quicker_than_SSIS_easier_than_BCP

echo off
 

echo off

cls

cd\
 

cd "c:\Program Files (x86)\Log Parser 2.2\"

LogParser -i:TSV -iSeparator:"|"  "select BusinessEntityID,PhoneNumber,PhoneNumberTypeID ,ModifiedDate from C:\temp\personphone.csv" -o:datagrid

 

LogParser -i:TSV -iSeparator:"|"  "select * from C:\temp\personphone.csv" -o:datagrid  -- To select all the rows - This single delimited pipe works even if the file contains two pipe delimited

 

LogParser -i:TSV -iSeparator:"|"  "select * from C:\temp\personphone.csv where Rownumber = 10" -o:datagrid  -- To select only the specific rownumber

 
Chart

logparser  "select date,cost  into c:\temp\expense.gif from c:\temp\fahimexpense.txt" -i:csv -o:chart -chartType:barstacked -view:on -values:on


The below logparser will truncate the data from the table client2file

create table dbo.client2file (customerid int null,email varchar(100))

go

select * from dbo.client2file


LogParser -i:csv  "select customerid,email  into dbo.client2file from C:\Backup\FTP\client2file15032015.txt" -o:sql  -server:localhost  -database:test  -cleartable:ON -transactionRowCount:-1
 

--The below logparser won't truncate the data from the table client2file

LogParser -i:csv  "select customerid,email  into dbo.client2file from C:\Backup\FTP\client2file15032015.txt" -o:sql  -server:localhost  -database:test  -cleartable:OFF -transactionRowCount:-1

The below logparser is to insert additional filename and rownumber column into the table
 

create table dbo.client2filewithfilenamerownumber  (filename sysname,rownumber int,customerid int null,email varchar(100))

go

select * from dbo.client2filewithfilenamerownumber


LogParser -i:csv  "select filename,rownumber,customerid,email into client2filewithfilenamerownumber from C:\Backup\FTP\client2file15032015.txt" -o:sql  -server:localhost  -database:test  -cleartable:ON -transactionRowCount:-1

 

 

Friday, 20 March 2015

Script Database Objects

Script SQL Server Objects (Assemblies, Tables, Views, Stored Procs, etc) to FileReference:https://gallery.technet.microsoft.com/scriptcenter/Script-SQL-Server-Objects-df9dc0ba

Wednesday, 18 March 2015

Schema Level Permissions

Reference:

https://technet.microsoft.com/en-us/library/dd283095%28v=sql.100%29.aspx?f=255&MSPPError=-2147217396

--create a test database
CREATE DATABASE [SecurityTest]
GO
USE SecurityTest
GO
CREATE TABLE [dbo].[table1](
       [pkcol] [int] IDENTITY(1,1) NOT NULL,
       [col1] [int] NULL,
PRIMARY KEY CLUSTERED ([pkcol])
)
GO
--create test user login
CREATE LOGIN [User1] WITH PASSWORD=N'p@55w0rd'
GO
--create user in test database
CREATE USER [User1] FOR LOGIN [User1] WITH DEFAULT_SCHEMA=[Developer_Schema]
GO
--create role
CREATE ROLE [Developer_Role] AUTHORIZATION [dbo]
GO
--create schema
CREATE SCHEMA [Developer_Schema] AUTHORIZATION [User1]
GO
--apply permissions to schemas
GRANT ALTER ON SCHEMA::[Developer_Schema] TO [Developer_Role]
GO
GRANT CONTROL ON SCHEMA::[Developer_Schema] TO [Developer_Role]
GO
GRANT SELECT ON SCHEMA::[Developer_Schema] TO [Developer_Role]
GO
GRANT DELETE ON SCHEMA::[dbo] TO [Developer_Role]
GO
GRANT INSERT ON SCHEMA::[dbo] TO [Developer_Role]
GO
GRANT SELECT ON SCHEMA::[dbo] TO [Developer_Role]
GO
GRANT UPDATE ON SCHEMA::[dbo] TO [Developer_Role]
GO
GRANT REFERENCES ON SCHEMA::[dbo] TO [Developer_Role]
GO
--ensure role membership is correct
EXEC sp_addrolemember N'Developer_Role ', N'User1'
GO
--allow users to create tables in Developer_Schema
GRANT CREATE TABLE TO [Developer_Role]
GO
--Allow user to connect to database

GRANT CONNECT TO [User1]


Tuesday, 17 March 2015

SQL Server Email Validation Function



SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[IsEmailValid] (@Email varchar (100))       
RETURNS BIT       
AS       
BEGIN       
 /*       
  One instance of @, multiple dots, atleast one after @       
  no space       
  after the last dot minimum 2 chars, max 3 chars       
  some chars between @ and .       
  No Special Chars       
    */       
         
 DECLARE @atpos int, @dotpos int       
       
 SET @Email = LTRIM(RTRIM(@Email)) -- remove leading and trailing blanks       
       
 IF LEN(@Email) = 0 RETURN(0) -- nothing to validate       
 SET @atpos = charindex('@',@Email) -- position of first (hopefully only) @       
 IF @atpos <= 1 OR @atpos = LEN(@Email) RETURN(0) -- @ is neither 1st or last or missing       
 IF CHARINDEX('@', @email, @atpos+1) > 0 RETURN(0) -- Two @s are illegal       
 IF CHARINDEX(' ',@Email) > 0 RETURN(0) -- Embedded blanks are illegal       
 SET @dotpos = CHARINDEX('.',Reverse(@Email)) -- location (from rear) of last dot       
 IF (@dotpos < 3) or (@dotpos > 5) or (LEN(@Email) - @dotpos) < @atpos RETURN (0) -- dot / 2 or 3 char, after @       
 if (@atpos + @dotpos = len(@email)) Return (0) -- Nothing between @ and .       
       
 -- Special Characters Scan       
 Declare @emaillen int, @currpos int, @currascii int       
       
 SET @emaillen = LEN(@email)       
 SET @currpos = 0       
 WHILE @emaillen != @currpos       
 BEGIN       
  SET @currpos = @currpos + 1       
  SET @currascii = ASCII(substring(@email, @currpos, 1))       
       
  if @currascii <= 44 and @currascii<>43 Return (0)       
  if @currascii = 47  Return (0)       
  if @currascii >= 58 and @currascii <= 63 Return (0)       
  if @currascii >= 91 and @currascii <= 94 Return (0)       
  if @currascii = 96 Return (0)       
  if @currascii >= 123 Return (0)       
 END       
 RETURN(1) -- Hope this is a valid email        
END

GO



DATE FORMAT

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [REFAPI].[AnyFormatDateTime]
(
@Date datetime,
@FORMAT VARCHAR(80)
)
RETURNS NVARCHAR(80)
AS
BEGIN
DECLARE @Dateformat INT
DECLARE @ReturnedDate VARCHAR(80)
DECLARE @TwelveHourClock INT
DECLARE @Before INT
DECLARE @pos INT
DECLARE @Escape INT

-- (C) Pinal Dave http://www.SQLAuthority.com

SELECT @ReturnedDate='error! unrecognised format '+@format
SELECT @DateFormat=CASE @format
WHEN 'mmm dd yyyy hh:mm AM/PM' THEN 100
WHEN 'mm/dd/yy' THEN 1
WHEN 'mm/dd/yyyy' THEN 101
WHEN 'yy.mm.dd' THEN 2
WHEN 'dd/mm/yy' THEN 3
WHEN 'dd.mm.yy' THEN 4
WHEN 'dd-mm-yy' THEN 5
WHEN 'dd Mmm yy' THEN 6
WHEN 'Mmm dd, yy' THEN 7
WHEN 'hh:mm:ss' THEN 8
WHEN 'yyyy.mm.dd' THEN 102
WHEN 'dd/mm/yyyy' THEN 103
WHEN 'dd.mm.yyyy' THEN 104
WHEN 'dd-mm-yyyy' THEN 105
WHEN 'dd Mmm yyyy' THEN 106
WHEN 'Mmm dd, yyyy' THEN 107
WHEN 'Mmm dd yyyy hh:mm:ss:ms AM/PM' THEN 9
WHEN 'Mmm dd yyyy hh:mi:ss:mmm AM/PM' THEN 9
WHEN 'Mmm dd yy hh:mm:ss:ms AM/PM' THEN 109
WHEN 'mm-dd-yy' THEN 10
WHEN 'mm-dd-yyyy' THEN 110
WHEN 'yy/mm/dd' THEN 11
WHEN 'yyyy/mm/dd' THEN 111
WHEN 'yymmdd' THEN 12
WHEN 'yyyymmdd' THEN 112
WHEN 'dd Mmm yyyy hh:mm:ss:Ms' THEN 113
WHEN 'hh:mm:ss:Ms' THEN 14
WHEN 'yyyy-mm-dd hh:mm:ss' THEN 120
WHEN 'yyyy-mm-dd hh:mm:ss.Ms' THEN 121
WHEN 'yyyy-mm-ddThh:mm:ss.Ms' THEN 126
WHEN 'dd Mmm yyyy hh:mm:ss:ms AM/PM' THEN 130
WHEN 'dd/mm/yy hh:mm:ss:ms AM/PM' THEN 131
WHEN 'RFC822' THEN 2
WHEN 'dd Mmm yyyy hh:mm' THEN 4
ELSE 1 END
SELECT @ReturnedDate='error! unrecognised format ' +@format+CONVERT(VARCHAR(10),@DateFormat)
IF @DateFormat>=0
SELECT @ReturnedDate=CONVERT(VARCHAR(80),@Date,@DateFormat)
--check for favourite and custom formats that can be done quickly
ELSE IF @DateFormat=-2--then it is RFC822 format
SELECT @ReturnedDate=LEFT(DATENAME(dw, @Date),3) + ', ' + STUFF(CONVERT(NVARCHAR,@Date,113),21,4,' GMT')
ELSE IF @DateFormat=-4--then it is european day format with minutes
SELECT @ReturnedDate=CONVERT(CHAR(17),@Date,113)
ELSE
BEGIN
SELECT @Before=LEN(@format)
SELECT @Format=REPLACE(REPLACE(REPLACE( @Format,'AM/PM','#'),'AM','#'),'PM','#')
SELECT @TwelveHourClock=CASE WHEN @Before >LEN(@format) THEN 109 ELSE 113 END, @ReturnedDate=''
WHILE (1=1)--forever
BEGIN
SELECT @pos=PATINDEX('%[yqmidwhs:#]%',@format+' ')
IF @pos=0--no more date format strings
BEGIN
SELECT @ReturnedDate=@ReturnedDate+@format
BREAK
END
IF @pos>1--some stuff to pass through first
BEGIN
SELECT @escape=CHARINDEX ('\',@Format+'\') --is it a literal character that is escaped?
IF @escape<@pos BEGIN
SET @ReturnedDate=@ReturnedDate+SUBSTRING(@Format,1,@escape-1) +SUBSTRING(@format,@escape+1,1)
SET @format=RTRIM(SUBSTRING(@Format,@Escape+2,80))
CONTINUE
END
SET @ReturnedDate=@ReturnedDate+SUBSTRING(@Format,1,@pos-1)
SET @format=RTRIM(SUBSTRING(@Format,@pos,80))
END
SELECT @pos=PATINDEX('%[^yqmidwhs:#]%',@format+' ')--get the end
SELECT @ReturnedDate=@ReturnedDate+--'('+substring(@Format,1,@pos-1)+')'+
CASE SUBSTRING(@Format,1,@pos-1)
--Mmmths as 1--12
WHEN 'M' THEN CONVERT(VARCHAR(2),DATEPART(MONTH,@Date))
--Mmmths as 01--12
WHEN 'Mm' THEN CONVERT(CHAR(2),@Date,101)
--Mmmths as Jan--Dec
WHEN 'Mmm' THEN CONVERT(CHAR(3),DATENAME(MONTH,@Date))
--Mmmths as January--December
WHEN 'Mmmm' THEN DATENAME(MONTH,@Date)
--Mmmths as the first letter of the Mmmth
WHEN 'Mmmmm' THEN CONVERT(CHAR(1),DATENAME(MONTH,@Date))
--Days as 1--31
WHEN 'D' THEN CONVERT(VARCHAR(2),DATEPART(DAY,@Date))
--Days as 01--31
WHEN 'Dd' THEN CONVERT(CHAR(2),@date,103)
--Days as Sun--Sat
WHEN 'Ddd' THEN CONVERT(CHAR(3),DATENAME(weekday,@Date))
--Days as Sunday--Saturday
WHEN 'Dddd' THEN DATENAME(weekday,@Date)
--Years as 00--99
WHEN 'Yy' THEN CONVERT(CHAR(2),@Date,12)
--Years as 1900--9999
WHEN 'Yyyy' THEN DATENAME(YEAR,@Date)
WHEN 'hh:mm:ss' THEN SUBSTRING(CONVERT(CHAR(30),@date,@TwelveHourClock),13,8)
WHEN 'hh:mm:ss:ms' THEN SUBSTRING(CONVERT(CHAR(30),@date,@TwelveHourClock),13,12)
WHEN 'h:mm:ss' THEN SUBSTRING(CONVERT(CHAR(30),@date,@TwelveHourClock),13,8)
--the SQL Server BOL syntax, for compatibility
WHEN 'hh:mi:ss:mmm' THEN SUBSTRING(CONVERT(CHAR(30),@date,@TwelveHourClock),13,12)
WHEN 'h:mm:ss:ms' THEN SUBSTRING(CONVERT(CHAR(30),@date,@TwelveHourClock),13,12)
WHEN 'H:m:s' THEN SUBSTRING(REPLACE(':'+SUBSTRING(CONVERT(CHAR(30), @Date,@TwelveHourClock),13,8),':0',':'),2,30)
WHEN 'H:m:s:ms' THEN SUBSTRING(REPLACE(':'+SUBSTRING(CONVERT(CHAR(30), @Date,@TwelveHourClock),13,12),':0',':'),2,30)
--Hours as 00--23
WHEN 'hh' THEN REPLACE(SUBSTRING(CONVERT(CHAR(30), @Date,@TwelveHourClock),13,2),' ','0')
--Hours as 0--23
WHEN 'h' THEN LTRIM(SUBSTRING(CONVERT(CHAR(30), @Date,@TwelveHourClock),13,2))
--Minutes as 00--59
WHEN 'Mi' THEN DATENAME(minute,@date)
WHEN 'mm' THEN DATENAME(minute,@date)
WHEN 'm' THEN CONVERT(VARCHAR(2),DATEPART(minute,@date))
--Seconds as 0--59
WHEN 'ss' THEN DATENAME(second,@date)
--Seconds as 0--59
WHEN 'S' THEN CONVERT(VARCHAR(2),DATEPART(second,@date))
--AM/PM
WHEN 'ms' THEN DATENAME(millisecond,@date)
WHEN 'mmm' THEN DATENAME(millisecond,@date)
WHEN 'dy' THEN DATENAME(dy,@date)
WHEN 'qq' THEN DATENAME(qq,@date)
WHEN 'ww' THEN DATENAME(ww,@date)
WHEN '#' THEN REVERSE(SUBSTRING(REVERSE(CONVERT(CHAR(26), @date,109)),1,2))
ELSE
SUBSTRING(@Format,1,@pos-1)
END
SET @format=RTRIM(SUBSTRING(@Format,@pos,80))
END
END
RETURN @ReturnedDate
END
GO