-->
Tampilkan postingan dengan label SQL SERVER. Tampilkan semua postingan
Tampilkan postingan dengan label SQL SERVER. Tampilkan semua postingan

03 April 2018

Mengubah Kolom Menjadi Baris Di SQL Server



Hi, Mas bro,....

Aku mau berbagi ilmu lagi nich mas bro,
mumpung aku inget ya...

Bagaimana caranya mengubah kolom menjadi baris di SQL Server  :)

Gini....ni..cara ngebuatnya mas bro :)

Langkahnya :
Buka SQL SERVER Editor, lalu Copy Paste Script dibawah ini mas bro

--Membuat table temporary
create table #Temp_Table
(
   id_customer int,
   book varchar(64),
   price int,
   qty int,
   tahun_terbit int
)

insert into  #Temp_Table  values ('1','SQL Backup','1200000','10','2016')
insert into  #Temp_Table  values ('2','Hosting SQL','1500000','20','2016')
insert into  #Temp_Table  values ('3','SQL Server Training','2000000','15','2016')
insert into  #Temp_Table  values ('4','Database Administrator','1000000','22','2016')
insert into  #Temp_Table  values ('5','Cloud Database','130000','31','2017')
insert into  #Temp_Table  values ('6','Cloud Database 1','130000','31','2017')
insert into  #Temp_Table  values ('7','Cloud Database 2','130000','31','2018')
insert into  #Temp_Table  values ('8','Cloud Database 3','130000','31','2018')
insert into  #Temp_Table  values ('9','Cloud Database 4','130000','31','2018')
insert into  #Temp_Table  values ('10','Cloud Database 5','130000','31','2018')

--Deklarasikan variabel-variabel yang diperlukan
DECLARE   @SQLQuery AS NVARCHAR(MAX)
DECLARE   @PivotColumns AS NVARCHAR(MAX)

--mendapatkan kolom yang akan di jadikan kunci pada pivot column  
SELECT   @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME(tahun_terbit)
FROM (SELECT DISTINCT tahun_terbit FROM [dbo].[#Temp_Table]) AS PivotExample

 
--Membuat Query dinamis dengan semua nilai untuk kolom pivot pada waktu proses
SET   @SQLQuery = 
    N'SELECT DISTINCT id_customer,book,price, ' +   @PivotColumns + '
 FROM [dbo].[#Temp_Table] 
    PIVOT( sum(qty)
          FOR tahun_terbit IN (' + @PivotColumns + ')) AS P'

--Jalankan Query Dinamis yang tadi sudah di jabarkan
EXEC sp_executesql @SQLQuery

Ini Hasilnya :





Selamat mencoba Mas Bro :)




02 April 2018

Kompare Tabel Kolom Di Dua Database SQL Server



Hi, Mas bro,....

Aku mau berbagi ilmu lagi nich mas bro,
mumpung aku inget ya...

Bagaimana caranya Kompare Kolom yang ada di tabel  tetapi dari dua database menggunakan SQL Server :)

Gini....ni..cara ngebuatnya mas bro :)

Langkahnya :
Buka SQL SERVER Editor, lalu Copy Paste Script dibawah ini mas bro

DECLARE @Db1 NVARCHAR(MAX)
DECLARE @Table1 NVARCHAR(MAX)
DECLARE @Db2 NVARCHAR(MAX)
DECLARE @Table2 NVARCHAR(MAX)
DECLARE @Sql NVARCHAR(MAX)

SET @Db1 = '{Nama Database 1}'
SET @Table1 = '{Nama Tabel l}'
SET @Db2 = '{Nama Database 2}'
SET @Table2 = '{Nama Tabel 2}'
SET @Sql = ' ' +
' SELECT ''in ' + @Db1 + '.' + @Table1 + ' --- not in ' + @Db2 + '.' + @Table2 + ''' AS TITLE, a.TABLE_CATALOG, a.column_name ' +
' FROM ' + @Db1 + '.INFORMATION_SCHEMA.COLUMNS a ' +
' WHERE a.column_name NOT IN (SELECT column_name ' +
' FROM ' + @Db2 + '.INFORMATION_SCHEMA.COLUMNS b ' +
' WHERE b.table_name IN (''' + @Table2 + ''')) ' +
' AND a.table_name IN (''' + @Table1 + ''') ' +

' UNION ALL ' +

' SELECT ''in ' + @Db2 + '.' + @Table2 + ' --- not in ' + @Db1 + '.' + @Table1 + ''' AS TITLE, a.TABLE_CATALOG, a.column_name ' +
' FROM ' + @Db2 + '.INFORMATION_SCHEMA.COLUMNS a ' +
' WHERE a.column_name NOT IN (SELECT column_name ' +
' FROM ' + @Db1 + '.INFORMATION_SCHEMA.COLUMNS b ' +
' WHERE b.table_name IN (''' + @Table1 + ''')) ' +
' AND a.table_name IN (''' + @Table2 + ''') ' +
''

EXEC (@Sql)

Ini Hasilnya :





Selamat mencoba Mas Bro :)




Looping List Data Di SQL Server



Uda lama kaga buka-buka blogger nih mas bro,....

Aku mau berbagi ilmu lagi nich mas bro,
mumpung aku inget ya...

Bagaimana caranya Looping List Data didalam Database SQL Server :)

Sering kita binggung bagaimana memecah data dari yang berbentuk list menjadi data perbaris di SQL Server, contohnya :
Isi Data

X = Darwan,Leo,Nardo,Sitepu,

Kita inginkan menjadi :

Darwan
Leo
Nardo
Sitepu

Gini....ni..cara ngebuatnya mas bro :)

Langkahnya :
Buka SQL SERVER Editor, lalu Copy Paste Script dibawah ini mas bro

DECLARE @valueList varchar(8000)
DECLARE @pos INT
DECLARE @len INT
DECLARE @value varchar(8000)

SET @valueList = 'Darwan,Leo,Nardo,Sitepu,'

set @pos = 0
set @len = 0

WHILE CHARINDEX(',', @valueList, @pos+1)>0
BEGIN
    set @len = CHARINDEX(',', @valueList, @pos+1) - @pos
    set @value = SUBSTRING(@valueList, @pos, @len)
    PRINT @value
    set @pos = CHARINDEX(',', @valueList, @pos+@len) +1
END

Ini Hasilnya :





Selamat mencoba Mas Bro :)




25 Januari 2016

Mencari nama kolom / field di Database dengan SQL Server


Haiii Mas bro....

Aku mau berbagi ilmu lagi nich mas bro,
mumpung aku inget ya...

Bagaimana mencari Nama Kolom atau Nama Field didalam Database SQL Server :)

Sering kita binggung bagaimana mencari Nama Field atau Nama Kolom di dalam sebuah Database, apalagi database yang akan kita cari tabelnya buanyak buanget ya, hehehehe.

Disini saya ada sedikit tips atau info, bagaimana mencari Nama Kolom atau Field didalam database sql server jika kita hanya tahu, nama kolomnya akan tetapi tidak inget nama tabelnya.

Yuk mulai yuk......

Cara Kesatu :
Mencari Nama Tabel dari kolom yang kita mau

Jika kita ingat nama kolom / filednya, kita bisa menggunakan Query dibawah ini :
SELECT name FROM sysobjects WHERE id IN ( SELECT id FROM syscolumns WHERE name = 'Nama Kolom' )

Ini Hasilnya :


Atau
Jika kita tidak ingat nama kolom / fieldnya, kita bisa menggunakan Query dibawah ini :
SELECT name FROM sysobjects WHERE id IN ( SELECT id FROM syscolumns WHERE name like '%Nama Kolom%' )

Ini Hasilnya :


Cara Kedua :
Mencari Nama Tabel beserta detail nama kolom / fieldnya, kita bisa menggunakan Query dibawah ini :
select sysobjects.name AS NAMA_TABEL, syscolumns.name AS NAMA_KOLOM
from syscolumns
left join sysobjects on sysobjects.id = syscolumns.id
where syscolumns.name like '%user%' and sysobjects.xtype ='u'
order by sysobjects.name  

Ini Hasilnya :




Selamat mencoba Mas Bro :)


24 Januari 2016

Restore Database Dari file Zip Dengan Coldfusion



Hi, Mas bro.....
Salam hangat buat semuanya ya.

Disini saya hanya ingin menambahkan script ataupun fungsi restore database melalui bahasa pemrograman Coldfusion dari bacaan saya terdahulu mengenai "Backup Database Ke Dalam File Zip Dengan Coldfusion".

Dimana hasil Backup Database terdahulu menggunakan ekstensi zip dan disini saya akan memberikan script ataupun fungsi restore database dari file zip ke Database yang kita inginkan.

Langkah Pertama

Masukkan Source Code Dibawah ini kedalam editor yang mas bro punya.



<cffunction name="RestoreDatabase" returnType="string" output="false">
    <cfargument name="dbsource" type="string" required="true">
    <cfargument name="zFilePath" type="string" required="true">
    <cfargument name="Eksekusi" type="string" required="true">
    <cfzip action="read" file="#zFilePath#" entrypath="data.packet.xml" variable="wddxText" />
    <cfwddx action="wddx2cfml" input="#wddxText#" output="qDatabase" />
    <cfif arguments.Eksekusi EQ "view"> 
     <!--- View Table in Database --->        
        <cfset XtempFOrm = "<style type='text/css'>body{  font-family:Verdana, Arial, Helvetica, sans-serif;  padding:30px 80px 30px 80px;  text-align:left;  border-top:20px solid ##006699;  margin:0;}h1{  color:##006699;  font-size:16px;  font-weight:bold;}h2{  color:##006699;  font-size:12px;  font-weight:bold;}p, label{  color:##666666;  font-size:10px;}label.sys {  color:##CCCCCC}td {  width:50%;  vertical-align:top}</style><form action='#CGI.SCRIPT_NAME#' method='post'>">
        <cfset XtempFOrm = "#XtempFOrm#<table summary='restore' width='550'><tr><td>">        
        <cfloop list="#ListSort(StructKeyList(qDatabase), "text")#" index="table">
         <cfset XtempFOrm = "#XtempFOrm#<input type='checkbox' name='tablename' id='tablename_#table#' value='#table#' /><label for='tablename_#table#' class='#Left(table,3)#'>#table#</label><br />">                              
        </cfloop>
        <cfset XtempFOrm = "#XtempFOrm#</td><td><input type='checkbox' name='delete' id='delete' value='1' /><label for='delete'>Tick the box to show that you understand that the existing data will be deleted!</label><br /><input type='submit' name='submit' value='restore' /></td></tr></table></form>">            
        <cfreturn XtempFOrm>
        <!--- End View Table in Database --->
    <cfelseif arguments.Eksekusi EQ "restore">
     <!--- Restore Table in Database --->
        <cfset LstCekStatus ="CF_SQL_BIGINT,CF_SQL_DATE,CF_SQL_FLOAT,CF_SQL_FLOAT,CF_SQL_INTEGER,CF_SQL_MONEY,CF_SQL_NUMERIC,CF_SQL_REAL,CF_SQL_SMALLINT,CF_SQL_MONEY4,CF_SQL_TINYINT">
        <cfset lstStatus ="">
     <cfif StructKeyExists(form, "tablename")>
    <cfif Not StructKeyExists(form, "delete")>
           <cfset lstStatus ="<p>You didn't tick the delete box :)</p>">                       
          <cfelse>                                 
            <cfloop list="#StructKeyList(qDatabase)#" index="index">            
              <cfif ListFindNoCase(form.tablename, index) eq 0>
               <cfset lstStatus = "<p>Skipping #index# table</p><br />">                
              <cfelse>
               <cfset lstStatus = "<h2>Restoring #index# table</h2><br />">    
                <!---<cfdump var="#qDatabase[index].data#">--->
                <cfset qSchema = qDatabase[index].schema />
                <cfset qData = qDatabase[index].data />        
                <cfquery name="qDelete_#index#" datasource="#arguments.dbsource#">
                  DELETE FROM [#index#]
                </cfquery>                
                <cfif ListFindNoCase( ValueList(qSchema.type_name), "int identity" )>
                  <cfset bIdentityInsert = True />
                <cfelse>
                  <cfset bIdentityInsert = False />
                </cfif>                
                <cfif bIdentityInsert>
                  <cfquery name="qIDENTITY_INSERT_#index#_ON" datasource="#arguments.dbsource#">
                    SET IDENTITY_INSERT [#index#] ON
                  </cfquery>
                </cfif>                
                <cfloop from="1" to="#qData.RecordCount#" index="iCurrentrow">              
                  <cfquery name="qInsert_#index#_#iCurrentrow#" datasource="#arguments.dbsource#">
                    INSERT INTO [#index#] (
                      #ValueList(qSchema.column_name)#
                    )
                    VALUES (
                    <cfloop from="1" to="#qSchema.RecordCount#" index="iColumn">
                      <cfset columnName = qSchema["column_name"][iColumn] />
                      <cfset columnType = getCFDataType(qSchema["type_name"][iColumn]) />  
                      <cfif ListFindNoCase(LstCekStatus,columnType,",") NEQ 0 AND len(trim(qData[columnName][iCurrentrow])) EQ 0>
                       NULL
                      <cfelse>   
                       <cfqueryparam value="#qData[columnName][iCurrentrow]#" cfsqltype="#columnType#" />
                      </cfif>
                      <cfif iColumn lt qSchema.RecordCount>,</cfif>
                    </cfloop>  
                    )
                  </cfquery>              
                </cfloop>                
                <cfif bIdentityInsert>
                  <cfquery name="qIDENTITY_INSERT_#index#_OFF" datasource="#arguments.dbsource#">
                    SET IDENTITY_INSERT [#index#] OFF
                  </cfquery>
                </cfif>                
              </cfif>              
            </cfloop>
          </cfif>        
        </cfif>
        <cfreturn lstStatus>  
        <!--- End Restore Table in Database --->
    </cfif>
</cffunction>
<cffunction name="getCFDataType" returntype="string" hint="I return the cfsqltype for the cfqueryparam function">  
  <cfargument name="type" required="true" type="string" />  
  <cfset var private = StructNew() />  
  <cfswitch expression="#ListFirst(LCase(Trim(Arguments.Type)), ' ')#">
    <cfcase value="bigint">
      <cfset private.CFDataType = "CF_SQL_BIGINT" />
    </cfcase>
    <cfcase value="binary,image,sql_variant,sysname,varbinary">
      <cfset private.CFDataType = "" />
    </cfcase>
    <cfcase value="bit">
      <cfset private.CFDataType = "CF_SQL_BIT" />
    </cfcase>
    <cfcase value="char,nchar">
      <cfset private.CFDataType = "CF_SQL_CHAR" />
    </cfcase>
    <cfcase value="smalldatetime">
      <cfset private.CFDataType = "CF_SQL_DATE" />
    </cfcase>
    <cfcase value="decimal">
      <cfset private.CFDataType = "CF_SQL_FLOAT" />
    </cfcase>
    <cfcase value="float">
      <cfset private.CFDataType = "CF_SQL_FLOAT" />
    </cfcase>
    <cfcase value="int">
      <cfset private.CFDataType = "CF_SQL_INTEGER" />
    </cfcase>
    <cfcase value="money">
      <cfset private.CFDataType = "CF_SQL_MONEY" />
    </cfcase>
    <cfcase value="ntext,text">
      <cfset private.CFDataType = "CF_SQL_LONGVARCHAR" />
    </cfcase>
    <cfcase value="numeric,numeric()">
      <cfset private.CFDataType = "CF_SQL_NUMERIC" />
    </cfcase>
    <cfcase value="nvarchar,varchar">
      <cfset private.CFDataType = "CF_SQL_VARCHAR" />
    </cfcase>
    <cfcase value="real">
      <cfset private.CFDataType = "CF_SQL_REAL" />
    </cfcase>
    <cfcase value="smallint">
      <cfset private.CFDataType = "CF_SQL_SMALLINT" />
    </cfcase>
    <cfcase value="smallmoney">
      <cfset private.CFDataType = "CF_SQL_MONEY4" />
    </cfcase>
    <cfcase value="datetime,timestamp">
      <cfset private.CFDataType = "CF_SQL_TIMESTAMP" />
    </cfcase>
    <cfcase value="tinyint">
      <cfset private.CFDataType = "CF_SQL_TINYINT" />
    </cfcase>
    <cfcase value="uniqueidentifier">
      <cfset private.CFDataType = "CF_SQL_IDSTAMP" />
    </cfcase>
    <cfdefaultcase>
      <cfthrow message="#ListFirst(LCase(Trim(Arguments.Type)), ' ')#" />
    </cfdefaultcase>
  </cfswitch>
  <cfreturn Trim(private.CFDataType) />
</cffunction>


Lalu Simpan Source Code ini dengan nama file yang berakhiran ".cfm" misalkan "RestoreDatabase.cfm" kedalam direktori wwwroot Coldfusion yang sudah terinstal.

Langkah Kedua

Masukkan Source Code Dibawah ini kedalam editor yang mas bro punya (Masih didalam file "RestoreDatabase.cfm").


<cfoutput>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Import Database Tables</title>
</head>
<body>
<h1>Restore Data</h1>
<!---
 Restore a database dari zip file.
#RestoreDatabase("dbsource","DbFile","Action")#
 @param dbsource    Datasource (DNS). (Required)
 @param DbFile        Lokasi File dari backup database (dalam zip file).
 @ param Action       tindakan yang akan dilakukan (view = berfungsi untuk menampilkan isi dari Backup Database file yang ada, dan restore = untuk melakukan restore data dari data yang sudah dipilih)
 @author Darwan Leonardo Sitepu (dlns2001@yahoo.com) 
 @version 1, February 21, 2011 
--->
#RestoreDatabase("darwanlns.com","c:\ColdFusion9\wwwroot\BackupDatabase.zip","view")#

<cfif StructKeyExists(form, "tablename")>
#RestoreDatabase("darwanlns.com","c:\ColdFusion9\wwwroot\BackupDatabase.zip","restore")#
</cfif>

</body>
</html>
</cfoutput>

Keterangan :
darwanlns.com = Nama Datasource yang sudah dibuat di Coldfusion
c:\ColdFusion9\wwwroot\BackupDatabase.zip = Alamat dari file Database yang akan direstore
view = Menampilkan Isi dari database yang terdapat di zip file
restore = Melakukan restore database dari pilihan yang sudah dilakukan.


Langkah Ketiga :

Untuk Menjalankan Source code yang sudah mas bro punya, mas bro ketikkan saja alamat di browser mas bro misalkan.

http://localhost:8500/RestoreDatabase.cfm


Maka Contoh Hasil dari source code diatas akan seperti ini


Selamat Mencoba Mas Bro :) 

20 November 2012

Database Explorer Sistem Dengan Coldfusion


Hei Mas Bro,
Ketemu lagi nich....
Disini aku mau bagi-bagi ilmu, tentang bagaimana caranya membuat SQL Editor Database lengkap dengan struktur tablenya berbasis web menggunakan bahasa pemrograman Coldfusion,
Mungkin saya pernah juga merilis tulisan ini Membuat Query Editor Berbasis Web Dengan Coldfusion,
tapi disini beda mas bro, disini saya menambahkan beberapa fitur lainnya, mungkin mas bro bisa lihat dari gambar dibawah ini

 Tampilan Halaman Login

Halaman Utama

Tampilan Struktur Table & SQL Editor

Hasil Data Dari Query Yang Telah Dijalankan

Link Download : Database Explorer Sistem

Setelah Mas Bro download file diatas, mas bro langsung extrak saja ke dalam folder direktori "wwwroot" coldfusion,
Lalu tinggal di jalankan deh mas bro,
misalkan : http://localhost:8500/DatabaseExplorerSistem/

Hanya ada satu kata yang bisa saya ucapkan,

Selamat Mencoba & Rasakan Hasilnya Mas Bro :)

13 November 2012

Update Data Dari 2 Table Yang Berbeda Di SQL SERVER


Hey Mas Bro, ketemu lagi nich....
Mas Bro, aku mau bagi-bagi pengetahuan nich, tentang bagaimana caranya mengupdate data dari 2 Table yang berbeda.

Begini...nich caranya :


UPDATE dbo.[Tabel Tujuan]
SET [Field Table Tujuan] = dbo.[Table Sumber].[Field Table Sumber]
FROM dbo.[Table Sumber]
WHERE dbo[Tabel Tujuan].[Field Kunci Tujuan]=dbo.[Table Sumber].[Field Kunci Sumber] 


Contohnya dari penerapan Query Diatas adalah :


UPDATE dbo.DT_SO
SET TOTAL_PENGELUARAN=dbo.DT_TRANSAKSI.TOTAL_PENGELUARAN
FROM dbo.DT_TRANSAKSI

atau


UPDATE dbo.DT_SO
SET TOTAL_PENGELUARAN=dbo.DT_TRANSAKSI.TOTAL_PENGELUARAN
,PENGHASILAN_KONSUMEN = dbo.DT_TRANSAKSI.PENGHASILAN_KONSUMEN
FROM dbo.DT_TRANSAKSI

atau


UPDATE dbo.DT_SO
SET TOTAL_PENGELUARAN=dbo.DT_TRANSAKSI.TOTAL_PENGELUARAN
,PENGHASILAN_KONSUMEN = dbo.DT_TRANSAKSI.PENGHASILAN_KONSUMEN
FROM dbo.DT_TRANSAKSI
WHERE dbo.DT_SO.ID_SO=dbo.DT_TRANSAKSI.ID_SO


Untuk Mengetahui Hasilnya Silahkan Dicoba y Mas Bro.


Selamat Mencoba Mas Bro :)







12 November 2012

Delete Log Database di SQL Server


Ciank mas bro,
Mas Bro, aku mau bagi-bagi pengetahuan nich, tentang bagaimana caranya menghapus Log Database di SQL server,

Soalnya terkadang Log Database yang kita punya, bisa lebih besar berkali-kali lipat dari Data masternya,
jadi kalau kita tidak menghapus log datanya, maka lognya bisa ngebengkak mas bro.

Misalkan Database "dbDepkes.mdf" saya besarnya hanya 1 GB, tapi setelah saya lihat Log Databasenya "dbDepkes_log.ldf" besarnya bisa mencapai 476 GB.
Jadi Kalau begini caranya Hardisk Ane bisa langsung Abis nich mas bro....

Gini Nich cara menghapus Log Database SQL Server mas bro,

Langkah 1 :

* Mas Bro Buka SQL Server Management Studio Mas Bro,
* Lalu mas bro Klik Kanan Pada database yang dipilih.
* Lalu Pilih Task
* Lalu Pilih Detach

Lihat Gambar Dibawah ini


* Jika Ada Koneksi yag sedang aktif, Checklist Drop Connection, lalu tekan Ok Untuk Menutup Database yang sedang aktif

Langkah 2 :
Masuk Ke lokasi Folder Database yang ada di komputer mas bro,
Misalkan Ada di "D:\Data\Database", Lalu Rename File "dbDepkes_log.ldf" menjadi "dbDepkes_log_lama.ldf".

Langkah 3 :
Pada SQL Server Management Studio, Mas Bro Klik Kanan, Lalu Pilih Attach.



Setelah Itu Ikuti mas bro Klik tombol "Add",
Lalu Pilih Database yang yang mas bro mau, misalkan database "dbDepkes.mdf", Lalu Tekan OK



Lalu mas bro Klik pada File "dbDepkes.LDF" atau pada File Type yang tipenya adalah Log, Setelah mas bro klik, Lalu Tekan Tombol Remove.



Setelah Log Databasenya di hapus / remove sama mas bro, maka SQL Server akan secara otomatis membuat Log database baru setelah mas bro, menekan tombol OK.

Langkah 4 :
Setelah itu mas bro masuk ke lokasi Folder Database berada, lalu mas bro hapus Log database yang tadi sudah kita rubah namanya "dbDepkes_log_lama.ldf".

Nah Gitu dech mas bro, cara untuk menghapus data Log yang ada dan menggantinya dengan Data Log baru.

Selamat Mencoba Mas Bro :)

01 November 2012

Membuat Nilai Terbilang (Mata Uang Rupiah) Di SQL SERVER


Mas Bro, aku punya sedikit bocoran ni, bagaimana caranya membuat Nilai terbilang mata uang rupiah di SQL SERVER,

Gini....ni..cara ngebuatnya mas bro :)

Langkah Pertama :
Buka SQL SERVER Editor, lalu Copy Paste Script dibawah ini mas bro


CREATE FUNCTION [DBO].[TerbilangDetil] (@Nilai as decimal)
RETURNS varchar(200) AS
BEGIN
declare @TS varchar(200), @ST varchar(200), @S integer, @p integer, @r1 integer, @Bil varchar(200), @TP varchar(200), @hasil varchar(200)
    set @ST = Right(rTrim(Str(@Nilai + 1000)), 3)
    set @S = cast(Right(@ST, 1) as integer)
    set @p = cast(substring(@ST, 2, 1) as integer)
    set @r1 = cast(Left(@ST, 1) as integer)
    set @Bil = 'Satu    Dua     Tiga    Empat   Lima    '
    set @Bil = @Bil + 'Enam    Tujuh   Delapan Sembilan'
 
    If @S = 0
        set @TS = ''
    Else
        set @TS = rTrim(substring(@Bil, @S * 8 - 7, 8)) + ' '
     
    If @p = 0
        set @TP = @TS
    Else
        If @p = 1
            If @S = 0
                set @TP = 'Sepuluh '
            Else
                If @S = 1
                    set @TP = 'Sebelas '
                Else
                    set @TP = rTrim(substring(@Bil, @S * 8 - 7, 8)) + ' Belas '
        Else
            set @TP = rTrim(substring(@Bil, @p * 8 - 7, 8)) + ' Puluh ' + @TS
     
    If @r1 = 0
        set @hasil = @TP
    Else
        If @r1 = 1
            set @hasil = 'Seratus ' + @TP
        Else
            set @hasil = rTrim(substring(@Bil, @r1 * 8 - 7, 8)) + ' Ratus ' + @TP
return @hasil
END

Lalu Jalankan Script Diatas dengan menekan F5 atau !
Setelah Itu, Copy Paste lagi Script dibawah ini mas bro


CREATE FUNCTION [dbo].[FungsiTerbilang] (@angka as decimal(19,2))
RETURNS varchar (200) AS
BEGIN
Declare @b Decimal, @r Decimal, @J Decimal, @M Decimal, @T1 Decimal, @koma1 Decimal, @koma2 Integer, @hasil varchar(200)
Declare @s_t varchar(200), @ribu varchar(200), @Juta varchar(200), @Miliar varchar(200), @tx varchar(200), @angka1 varchar(200), @tx1 varchar(200)
set @s_t = case when Len(rTrim(cast(cast(@Angka as bigint) as varchar(20)))) < 15
        then replicate('0',15 - Len(rTrim(cast(cast(@Angka as bigint) as varchar(20))))) + rTrim(cast(cast(@Angka as bigint) as varchar(20)))
        else rTrim(cast(cast(@Angka as bigint) as varchar(20)))
         end
set @r = cast(Right(@s_t, 3) as integer)
set @b = cast(substring(@s_t, 10, 3)  as integer)
set @J = cast(substring(@s_t, 7, 3)  as integer)
set @M = cast(substring(@s_t, 4, 3)  as integer)
set @T1 = cast(Left(@s_t, 3)  as integer)
set @ribu = case when @b = 0 then ' ' else case when @b = 1 then 'Seribu' else [dbo].TerbilangDetil(@b) + 'Ribu' end end
set @Juta = case when @J = 0 then ' ' else [dbo].TerbilangDetil(@J) + 'Juta ' end
set @Miliar = case when @M = 0 then ' ' else [dbo].TerbilangDetil(@M) + 'Miliar' end
set @tx = Case
    when @Angka < 1000 -- Ratusan
                then [dbo].TerbilangDetil(@r)
        when @Angka < 1000000 -- Ribuan
                then @ribu + ' ' + [dbo].TerbilangDetil(@r)
        when @Angka < 1000000000 -- Jutaan
                then [dbo].TerbilangDetil(@J) + '' + rTrim('Juta ' + @ribu) + ' ' + [dbo].TerbilangDetil(@r)
    when @Angka < 1000000000000 -- Miliaran
                then [dbo].TerbilangDetil(@M) + '' + rTrim('Miliar ' + @Juta + @ribu) + ' ' + [dbo].TerbilangDetil(@r)
        when @Angka >= 1000000000000 -- Trilliun
                then [dbo].TerbilangDetil(@T1) + '' + rTrim('Trilliun ' + @Miliar + @Juta + @ribu) + ' ' + [dbo].TerbilangDetil(@r)
End
set @angka1 = rTrim(cast(@Angka as varchar(20)))
set @koma1 = case when charindex('.', @angka1) = 0 then 0 else cast(rTrim(substring(@angka1, charindex('.',@angka1) + 1, 2)) as integer) end
set @koma2 = Len(case when charindex('.',@angka1) = 0 then '0' else rTrim(substring(@angka1, charindex('.',@angka1) + 1, 2)) end)
If @koma1 > 0
begin
    If @koma1 < 10 And @koma2 = 1
    set @koma1 = @koma1 * 10
    set @tx1 = [dbo].TerbilangDetil(@koma1)  
    set @hasil = @tx + 'koma ' + @tx1 + 'Rupiah'
end
Else
    set @hasil = @tx + 'Rupiah'
return (@hasil)
END

Lalu Jalankan Script Diatas dengan menekan F5 atau !

Langkah Kedua :
Untuk mengetestnya, mas bro bisa mebuat Query seperti dibawah ini

Query :
select dbo.FungsiTerbilang('9750.35')

Hasil :
Sembilan Ribu Tujuh Ratus Lima Puluh koma Tiga Puluh Lima Rupiah


Selamat Mencoba Mas Bro :)

23 Oktober 2012

Bagaimana menjadwalkan dan mengotomatisasi backup database SQL Server di SQL Server atau SQL Server Express


Anda harus ikuti tiga langkah untuk mendukung database SQL Server Anda dengan menggunakan Windows Task Scheduler:

Langkah A: Gunakan SQL Server Management Studio atau SQL Server Management Studio Express atau SQLCMD untuk membuat prosedur yang tersimpan dalam database berikut master Anda:


USE [master] 
GO 
/****** Object:  StoredProcedure [dbo].[sp_BackupDatabases] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

-- ============================================= 
-- Author: Microsoft 
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName 
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================

CREATE PROCEDURE [dbo].[sp_BackupDatabases]  
            @databaseName sysname = null,
            @backupType CHAR(1),
            @backupLocation nvarchar(200) 
AS 

       SET NOCOUNT ON; 
           
            DECLARE @DBs TABLE
            (
                  ID int IDENTITY PRIMARY KEY,
                  DBNAME nvarchar(500)
            )
           
             -- Pick out only databases which are online in case ALL databases are chosen to be backed up
             -- If specific database is chosen to be backed up only pick that out from @DBs
            INSERT INTO @DBs (DBNAME)
            SELECT Name FROM master.sys.databases
            where state=0
            AND name=@DatabaseName
            OR @DatabaseName IS NULL
            ORDER BY Name
           
            -- Filter out databases which do not need to backed up
            IF @backupType='F'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
                  END
            ELSE IF @backupType='D'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE IF @backupType='L'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE
                  BEGIN
                  RETURN
                  END
           
            -- Declare variables
            DECLARE @BackupName varchar(100)
            DECLARE @BackupFile varchar(100)
            DECLARE @DBNAME varchar(300)
            DECLARE @sqlCommand NVARCHAR(1000) 
        DECLARE @dateTime NVARCHAR(20)
            DECLARE @Loop int                  
                       
            -- Loop through the databases one by one
            SELECT @Loop = min(ID) FROM @DBs

      WHILE @Loop IS NOT NULL
      BEGIN

-- Database Names have to be in [dbname] format since some have - or _ in their name
      SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'

-- Set the current date and time n yyyyhhmmss format
      SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' + REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')  

-- Create backup filename in path\filename.extension format for full,diff and log backups
      IF @backupType = 'F'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'D'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'L'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'

-- Provide the backup a name for storing in the media
      IF @backupType = 'F'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime
      IF @backupType = 'D'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime
      IF @backupType = 'L'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime

-- Generate the dynamic SQL command to be executed

       IF @backupType = 'F' 
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
                  END
       IF @backupType = 'D'
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END
       IF @backupType = 'L' 
                  BEGIN
               SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END

-- Execute the generated SQL command
       EXEC(@sqlCommand)

-- Goto the next database
SELECT @Loop = min(ID) FROM @DBs where ID>@Loop

END



Langkah B: Dalam sebuah editor teks, membuat file batch yang bernama Sqlbackup.bat, dan kemudian menyalin teks dari salah satu contoh berikut ke dalam file tersebut, tergantung pada skenario Anda:

Contoh 1: Full backup semua database contoh didalam server dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . –E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"


SQL SERVER EXPRESS
sqlcmd -S .\EXPRESS –E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"


Contoh 2 : Differential backup semua database contoh didalam server dengan menggunakan SQL Login dan password

// Sqlbackup.bat
SQL SERVER
sqlcmd -U SQLLogin -P password -S . -Q "EXEC sp_BackupDatabases @backupLocation ='D:\SQLBackups', @BackupType='D'"

SQL SERVER EXPRESS
sqlcmd -U SQLLogin -P password -S .\SQLEXPRESS -Q "EXEC sp_BackupDatabases @backupLocation ='D:\SQLBackups', @BackupType='D'"

Catatan : SQL Login harus memiliki setidaknya peran Operator Backup di SQL Server.


Contoh 3 : Log backup semua database dalam hal nama lokal SQLEXPRESS dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',@backupType='L'"

SQL SERVER EXPRESS
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',@backupType='L'"


Contoh 4 : Full backup DB USER database dalam contoh bernama SQL EXPRESS lokal dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’darwanlns’, @backupType='F'"

SQL SERVER EXPRESS
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’darwanlns’, @backupType='F'"


Demikian pula, Anda dapat membuat cadangan diferensial darwanlns dengan menyisipkan di 'D' untuk @backupTypeparameter dan cadangan log darwanlns dengan menyisipkan dalam 'L' untuk @backupType parameter.


Langkah C : Jadwal pekerjaan dengan menggunakan Windows Task Scheduler untuk menjalankan file batch yang Anda buat di langkah B. Untuk melakukan hal ini, ikuti langkah berikut:

  1. Pada komputer yang menjalankan SQL Server Express, klik Start  arahkan ke All Programs  ke Accessories titik, arahkan ke System Tools, dan kemudian klik Scheduled Tasks.
  2. Klik Dua Kali (Double Klik) Add Scheduled Task.
  3. Dalam Wizard Scheduled Task, klik Next.
  4. Klik Browse, klik file batch yang Anda buat pada langkah B, dan kemudian klik Open.
  5. Ketik SQLBACKUP untuk nama tugas, klik Daily, dan kemudian klik Next.
  6. Tentukan informasi untuk jadwal untuk menjalankan tugas. (Sebaiknya Anda menjalankan tugas ini minimal satu kali setiap hari.) Kemudian, klik Next.
  7. Dalam Enter the user name  ketik nama pengguna, dan kemudian ketik password di kolom Enter the password.

    Catatan Pengguna ini setidaknya harus diberikan peran BackupOperator di tingkat SQL Server jika Anda menggunakan salah satu batch file dalam contoh 1, 3, atau 4.
  8. Klik Next, dan kemudian klik Finish.
  9. Jalankan tugas yang dijadwalkan setidaknya satu kali untuk memastikan bahwa cadangan berhasil dibuat.


Catatan folder untuk dieksekusi SQLCMD umumnya dalam variabel Path untuk server setelah SQL Server terinstal, tetapi jika variabel Path tidak mencantumkan folder ini, Anda dapat menemukannya di bawah <Install lokasi>\90\Tools\Bin (Untuk contoh: C:\Program Files\Microsoft SQL Server\90\Tools\ Bin).

Sadarilah berikut saat Anda menggunakan prosedur yang didokumentasikan dalam artikel ini:


  • Windows Task Scheduler layanan harus berjalan pada waktu itu pekerjaan dijadwalkan untuk berjalan. Kami menyarankan agar Anda mengatur jenis startup untuk service as Automatic  Hal ini memastikan bahwa layanan akan berjalan bahkan pada restart.
  • Harus ada banyak ruang pada drive yang backup sedang ditulis. Kami merekomendasikan bahwa Anda membersihkan file lama di folder backup secara teratur untuk memastikan bahwa Anda tidak kehabisan ruang disk. Script tidak mengandung logika untuk membersihkan file lama.



Selamat Mencoba :)