Showing posts with label SQL Server. Show all posts
Showing posts with label SQL Server. Show all posts
Sunday, October 21, 2012 at 9:00 PM | 0 comments
Here is a sample t-sql code to send email from SQL Server


Please see example code below.

declare @From varchar(4000)
declare @To varchar(4000)
declare @Subject varchar(4000)
declare @Body varchar(4000)
declare @Attachment varchar(4000)
Declare @iMsg int
Declare @hr int
Declare @source varchar(255)
Declare @description varchar(500)
Declare @output varchar(1000)
Declare @mailserver varchar(255)
set @From = 'from@gmail.com'
set @To = 'to@gmail.com'
set @Subject = 'testing'
set @Body = 'test'
SELECT @mailserver = 'mail.gmail.com'
EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT
EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', @mailserver
EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null

EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject

IF @Attachment IS NOT NULL
BEGIN
EXEC @hr = sp_OAMethod @iMsg, 'AddAttachment', null, @Attachment
END

EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL

IF @hr <>0
select @hr
BEGIN
EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
IF @hr = 0
BEGIN
SELECT @output = ' Source: ' + @source
PRINT @output
SELECT @output = ' Description: ' + @description
PRINT @output
END ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
END
EXEC @hr = sp_OADestroy @iMsg

Posted by Shanto Labels:
Pada dasarnya untuk melihat data yang terlock ada di master.dbo.sysprocesses atau menjalankan sp_who2. untuk melihat lebih lengkapnya bisa mengunakan script dibawah


create proc sp_lock2
as select * from (
SELECT
s.spid,
s.blocked,
DB_NAME(s.dbid) DatabaseName,
s.program_name,
s.loginame,
OBJECT_NAME(s.dbid) ObjectName,
CAST(text AS VARCHAR(MAX)) SQL

FROM
sys.sysprocesses s
CROSS APPLY
sys.dm_exec_sql_text (sql_handle)
where blocked <> 0

union all


SELECT
s.spid,
s.blocked,
DB_NAME(s.dbid),
s.program_name,
s.loginame,
OBJECT_NAME(s.dbid),
CAST(text AS VARCHAR(MAX))
FROM
sys.sysprocesses s
CROSS APPLY
sys.dm_exec_sql_text (sql_handle)


where spid in (
SELECT
s.blocked
FROM
sys.sysprocesses s
CROSS APPLY
sys.dm_exec_sql_text (sql_handle)
where blocked <> 0 )

) B order by spid



Setelah itu di kill.....
Posted by Shanto Labels:
Ketika data di database kita baca atau di rubah, database system akan mengontrol apakah terjadi lock terhadap data. Pada dasarnya Lock berfungsi agar transkasi tidak dapat di rubah oleh transaksi lain selama transaksi tersebut sudah dilakukan commited hal ini menjaga konsistensi terhadap datanya.

So, gimana caranya agar kita bisa membaca data tersebut tanpa terjadi lock. kita bisa mengunakan NOLOCK dan READPAST, lalu bedanya apa ?

1. LOCK.
- Membaca data transaksi yang uncommited dan akan membaca data yang terlock.

Contoh :

BEGIN TRAN
UPDATE GS_AREA_CODES SET ac_area_desc = 'JAKARTA BARAT'
WHERE ac_area_id = '11'

lakukan

SELECT count(*) from GS_AREA_CODES with (NOLOCK)

akan menghasilakn 5 baris kemudian lakukan

ROLLBACK TRAN

lakukan kembali

SELECT count(*) from GS_AREA_CODES with (NOLOCK)

akan menghasilakn 5 baris juga.


2. READPAST.
- Membaca data transaksi yang commited dan akan mengabaikan data yang terlock.

Contoh :

BEGIN TRAN
UPDATE GS_AREA_CODES SET ac_area_desc = 'JAKARTA BARAT'
WHERE ac_area_id = '11'

lakukan

SELECT count(*) from GS_AREA_CODES with (READPAST)

akan menghasilakn 4 baris kemudian lakukan

ROLLBACK TRAN

lakukan kembali

SELECT count(*) from GS_AREA_CODES with (READPAST)

akan menghasilakn 5 baris.
Posted by Shanto Labels: