Pada tannggal 13 Maret 2010 saya diminta oleh mahasiswa Ilmu Komputer Universitas Lambung Mangkurat Banjarmasin angkatan 2007 untuk memberikan sedikit sharing knowledge mengenai SQL Server 2008.
Untuk itu saya coba mengenalkan mereka pada SQL Server 2008 Developer. Kebetulan semua mahasiswa sudah mengikuti program Dreamspark, jadi saya tidak kesulitan mengenai kebutuhan software SQL Server 2008 Developer untuk peserta. Acara dimulai dengan materi menginstall SQL Server 2008 Developer.
Setelah penginstallan materi dilanjutkan dengan memberikan penjelasan mengenai fitur-fitur terbaru di SQL Server 2008. Setelah itu dilanjutkan dengan melakukan penjelasan mengenai teknik-teknik T-SQL sederhana dengan menggunakan SQL Server Management Studio
Acara berlangsung dari jam 10.00 Wita sampai dengan 11.30 Wita. Peserta yang hadir ada 20 peserta.
Berikut ini dokumentasinya :

SQL Server 2008 memiliki fitur Auditing. dengan fitur ini akan sangat membantu sekali kerja seorang DBA untuk mengawasi perilaku-perilaku yang terjadi pada server. Level audit bisa kita lakukan pada level server maupun level database. Dengan adanya fitur ini, DBA dapat melakukan tracking perubahan yang terjadi pada sebuah object database maupun server.
Berikut ini akan saya coba contohkan cara mengaktifkan Auditing di SQL Server 2008 dengan menggunakan SQL Server 2008 Management Studio.
Kasusnya adalah seperti ini. Saya akan coba merekam kejadian-kejadian DML (insert, update, delete) di database humanresources.departement pada database AdventureWorks. dalam contoh ini saya menggunakan SQL Server 2008 Developer.
langkah pertama adalah kita set sebuah SQL Server Audit yang baru dengan cara mengklik Instances –> Security –> Audits kemudian klik kanan pada Audits, lalu pilih New Audits… (lihat gambar).
lalu akan muncul dialog box seperti berikut :
kemudian saya isikan setiap parameter seperti gambar diatas, setelah itu saya klik tombol OK.
Setelah tombol OK diklik, kemudian kita enabled-kan Audit yang baru saja kita buat dengan cara mengklik Kanan pada audit yang terbentuk dan pilih Enabled Audit , seperti pada gambar dibawah ini :
yang kemudian akan muncul dialog box seperti berikut :
Karena ini merupakan Audit pada level Database, kita sekarang akan menset Database Audit Spesification untuk database AdventureWorks. caranya adalah Expand database AdventureWorks –> Security –> Database Audit Spesification, kemudian klik kanan dan pilih New Database Audit Spesification. Silahkan lihat gambar dibawah ini :
setelah itu akan muncul dialog box seperti berikut :
Name dan Audit saya isikan sesuai gambar, sedangkan untuk actionnya saya isikan sebagai berikut :
- Audit Action Type : UPDATE
- Object Class : OBJECT
- Object : HumanResources
- Object Name : Department
- Principal : Database Roles –> Public
Setelah itu saya klik OK. Saya saat ini coba berikut satu contoh saja yaitu untuk Audit Action Type UPDATE. Setelah itu kita Enabled kan Database Audit Spesification yang telah kita buat tadi dengan cara mirip dengan saat mengenabledkan New Audit.
Kalo anda cek saat ini di drive C:\audit yang telah kita set untuk Audit, akan terlihat sebuah File log baru yang bekekstensi *.sqlaudit.
sekarang saya akan mencoba untuk melakukan update statement pada tabel HumanResources.Department
use AdventureWorks
go
update HumanResources.Department
set Name='Penjualan' where DepartmentID=3
go
update HumanResources.Department
set Name='Sales' where DepartmentID=3
go
lalu untuk melihat aktivitas terhadap audit yang telah diterapkan pada tabel HumanResources.Departement dapat dilakukan dengan cara membuka audit log seperti gambar berikut :
Klik kanan pada Audit yang telah dibuat seperti tampak pada gambar berikut :
dan pilihlah View Audit Logs, maka akan muncul log file Viewer untuk melihat Audit Collection yang terjadi. tampak seperti gambar :
Tampak dari audit viewer ini kegiatan-kegiatan update yang terjadi pada Table HumanResources.Department di database AdventureWorks. telah tercatat adanya 2 kali kegiatan update. Statement update yang digunakan pun dapat diketahui dari sini dan oleh siapa.
Ok, selamat mencoba dan semoga bermanfaat.
Declarative Management Framework adalah salahsatu fitur terbaru dari SQL Server 2008. Memiliki fungsi mirip dengan pengaturan policy di Windows, namun DMF ini dikhususkan untuk lingkungan SQL Server 2008. Dalam sample ini saya coba membuat sebuah aturan penamaan nama table di sebuah database.
Saya telah membuat sebuah video tutorial sederhana tentang fitur Declarative Management Framework yang telah saya upload ke youtube yaitu di http://www.youtube.com/watch?v=NuUdU-Ym7W8
[View:http://www.youtube.com/watch?v=NuUdU-Ym7W8]
Mengaktifkan fitur FILESTREAM di SQL Server 2008 memang sangat bermanfaat pada saat anda sedang mengerjakan project yang banyak melakukan pekerjaan menyimpan file-file dokumen berukuran besar. Namun ada beberapa hal yang harus disadari saat menggunakan fitur ini :
- FILESTREAM data tidak dapat di enkripsi walaupun transparant data encryption diaktifkan
- Database Mirroring tidak dapat diterapkan pada database yang mengaktifkan FILESTREAM
- Database Snapshots tidak dapat diterapkan pada database yang mengaktifkan FILESTREAM

Kadang bila kita sering bekerja dengan perintah-perintah DML, ya namanya manusia kadang ada khilafnya. bagaimana apabila Khilaf anda adalah melakukan perintah Update pada sebuah tabel tanpa menggunakan klausa ‘Where’ ? tentunya menjadi sebuah kecelakaan yang ‘menggetarkan’ hati bukan ?
sebenarnya hal ini bisa dicegah sejak dini, yaitu dengan memproteksi salah satu tabel atau semua tabel yang dianggap sangat penting. Pasang trigger pada tabel yang kita inginkan. berikut ini adalah contohnya :
1: USE AdventureWorks
2: GO
3: CREATE TRIGGER production.CegahUpdate
4: ON production.product
5: FOR UPDATE AS
6: BEGIN
7: DECLARE @JmlTerupdate int
8: SET @JmlTerupdate = @@ROWCOUNT;
9: IF @JmlTerupdate >= (SELECT SUM(row_count)jml FROM sys.dm_db_partition_stats
10: WHERE index_id = 1 and OBJECT_ID = OBJECT_ID('production.product'))
11: BEGIN
12: RAISERROR('Update Semua Data Tidak Diizinkan',16,1)
13: ROLLBACK TRANSACTION
14: RETURN;
15: END
16: END
17: GO
Saya akan coba jelaskan bagaimana trigger production.CegahUpdate ini bekerja.
Pada line 7 dan 8, kita coba tangkap jumlah baris yang terupdate pada statement terakhir, yaitu pada DML update yang terjadi. Bila record yang terjadi mencapai angka 2 milyar record atau lebih, jangan gunakan @@Rowcount tapi gunakan ROWCOUNT_BIG. dan rubah type data variable @JmlTerupdate dengan BigInt.
Setelah itu pada line 9 dan 10 mencoba untuk membandingkan jumlah baris yang terupdate dan jumlah baris record yang ada pada tabel production.product. Jika ternyata jumlah yang terupdate itu lebih atau sama dengan record yang ada, maka proses update yang terjadi akan di rollback (line 13) dan dipasang Raiserror dengan nilai severity 16 (line 12). Severity 16 melambangkan bahwa error yang terjadi dapat diatasi oleh user.
Mari kita coba trigger tersebut. saya coba untuk update tabel production.product pada field ListPrice. saya akan ubah semua listprice menjadi 100 dan berikut hasilnya
terlihat proses update telah di aborted. data tetap pada kondisi sebelum terjadi update.
Demikian semoga bermanfaat.
Setelah di blog yang lalu membahas mengenai Enable FILESTREAM on the instance of the SQL Server Database Engine, selanjutnya adalah membuat FileStream database nya.
Berbeda dengan cara membuat database biasanya. dalam membuat FileStream database memerlukan adanya penambahan File database yang memiliki file type FileStream Data yang berfungsi sebagai FileStream Data Countainer. Juga ada proses penambahan FileGroups sebagai Countains FileStream.
berikut ini adalah langkah-langkah pembuatan FileStream Database.
- Pertama kita siapkan sebuah FileStream Data Countainer didalam Hardrive kita. dalam contoh ini akan saya buat di drive E:\ yang nantinya apabila databasenya telah terbentuk akan muncul folder berikut E:\FileStreamSampleCountainer. Sedangkan File .MDF dan .LDF saya letakkan di E:\FileStreamSampleDB
- selanjutnya kita coba membuat databasenya
Use Master
GO
-- Membuat Database FileStreamSampleDB
CREATE DATABASE FileStreamSampleDB ON PRIMARY
( NAME = N'FileStreamSampleDB', FILENAME = N'E:\FileStreamSampleDB\FileStreamSampleDB.mdf' ,
SIZE = 10MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10% )
LOG ON
( NAME = N'FileStreamSampleDB_log', FILENAME = N'E:\FileStreamSampleDB\FileStreamSampleDB_log.ldf' ,
SIZE = 10MB , MAXSIZE = UNLIMITED , FILEGROWTH = 10%)
GO
-- Membuat FileGroup
ALTER DATABASE FileStreamSampleDB
ADD FILEGROUP [FileStreamSampleDBGroup] CONTAINS FILESTREAM
GO
-- Membuat FileStream Data Countainer
ALTER DATABASE FileStreamSampleDB
ADD FILE (NAME = N'FileStreamSampleDB_FSData', FILENAME = N'E:\FileStreamSampleCountainer')
TO FILEGROUP FileStreamSampleDBGroup
GO
- setelah di Execute dapat kita lihat object- object apa saja yang timbul di Instances yang kita miliki
Sampai disini kita sudah berhasil membuat sebuat FileStream Database. perhatikan pada folder E:\FileStreamSampleCountainer, terbentuk 2 buah objek yang salah satunya bernama filestream.hdr ,
file filestream.hdr merupakan file yang menampung informasi header dari FileStream, sehingga kerusakan pada file ini akan berakibat fatal pada FileStream Database.
Bila anda sedang mengerjakan sebuah project aplikasi yang menggunakan database serta dalam routinenya sering menggunakan file-file gambar, video, document, audio dan lain-lain atau anggaplah anda sedang mengerjakan project Document Management dengan menggunakan database SQL Server 2008, ada baiknya anda memanfaatkan fitur Filestream yang ada di SQL Server 2008.
Dengan menggunakan fitur FILESTREAM, file sebenarnya tidak tersimpan dalam database file, melainkan berada pada NT File System (akan saya jelaskan pada blog berikutnya).
untuk menggunakan fitur Filestream, ini bisa dilakukan pada saat instalasi pertama SQL Server 2008 atau apabila sudah terinstall namun belum mengaktifkan fitur Filestreamnya, dapat melakukan langkah-langkah sebagai berikut, namun sebelumnya anda harus memiliki akses sebagai SYSADMIN :
- Klik Start –> All Programs –> Microsoft SQL Server 2008 –> Configuration tools –> SQL Server Configuration Manager
- Klik SQL Server Services
- Pilih Instance yang mana yang akan di Enabled kan fitur Filestream nya (pada sample, saya memilih instance SQLSRV2008), lalu klik kanan, pilih Properties
- Maka akan muncul dialog box, pilih tab FILESTREAM seperti berikut :
- Check option ‘Enable FILESTREAM for Transact-SQL access’ kemudian klik OK.
- setelah itu jalankan T-SQL berikut :
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
Menghapus Semua Data di Banyak Table mengunakan Sebuah Store Procedure
Pernah mencoba untuk menghapus semua record yang ada di semua table di sebuah database ?
tentunya bila menggunakan cara satu persatu table di DELETE atau di TRUNCATE akan sangat melelahkan jika jumlahnya banyak, apalagi bila databasenya sudah menjadi sangat rumit. Misalkan setiap table mempunyai ketergantungan/Depencies dengan banyak table lain,
Ada 2 hal dalam melakukan pekerjaan menhapus semua data dalam sebuah database :
- Trigger, pastikan bahwa semua trigger yang telah terbuat didalam database tidak aktif
- Consraints, Menonaktifkan data integrity pada coloumn yang telah kita tetapkan.
Berikut ini adalah Store Procedure untuk dapat melakukan pengahapusan seluruh data yang ada disemua tabel yang ada pada sebuah database :
CREATE PROCEDURE dbo.DeleteAllData
AS
BEGIN
DECLARE @SQL nvarchar(2000), @TableName sysname, @SchemaName sysname
DECLARE DaftarTable SCROLL CURSOR FOR
SELECT QUOTENAME(TABLE_SCHEMA) AS schemaname, QUOTENAME(TABLE_NAME) AS name
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
OPEN DaftarTable
FETCH NEXT FROM DaftarTable INTO @SchemaName, @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
--Disable Semua Trigger
SET @SQL =
(SELECT 'ALTER TABLE '+ @SchemaName + '.' + @TableName + ' DISABLE TRIGGER ALL')
EXECUTE sp_ExecuteSQL @SQL;
IF @@ERROR = 0
BEGIN
PRINT 'disabled Triggers ' + @SchemaName + '.' + @TableName +' Sukses !'
END
ELSE
BEGIN
PRINT 'Disabled Triggers ' + @SchemaName + '.' + @TableName +' Gagal :('
END
--Disable semua Constraint
SET @SQL =
(SELECT 'ALTER TABLE '+ @SchemaName + '.' + @TableName + ' NOCHECK CONSTRAINT ALL')
EXECUTE sp_ExecuteSQL @SQL;
IF @@ERROR = 0
BEGIN
PRINT ' disabled Constraints ' + @SchemaName + '.' + @TableName +' Sukses !'
END
ELSE
BEGIN
PRINT ' disabled Constraints ' + @SchemaName + '.' + @TableName +' Gagal :('
END
FETCH NEXT FROM DaftarTable INTO @SchemaName, @TableName
END
FETCH FIRST FROM DaftarTable INTO @SchemaName, @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN
SET @SQL = (SELECT 'BEGIN TRY
TRUNCATE TABLE ' + @SchemaName + '.' + @TableName + '
PRINT ''Berhasil melakukan pekerjaan Truncated pada ' + @SchemaName + '.' + @TableName + '''
END TRY
BEGIN CATCH
DELETE FROM ' + @SchemaName + '.' + @TableName + '
IF EXISTS(SELECT ''A'' FROM information_schema.columns
WHERE COLUMNPROPERTY(OBJECT_ID(''' + @SchemaName + '.' + @TableName + '''),
column_name,''IsIdentity'')=1 AND QUOTENAME(TABLE_SCHEMA) = ''' + @SchemaName + '''
AND QUOTENAME(TABLE_NAME) = ''' + @TableName + ''')
BEGIN
DBCC CHECKIDENT(''' + @SchemaName + '.' + @TableName + ''', RESEED, 0)
END
PRINT ''Berhasil melakukan Penghapusan data pada ' + @SchemaName + '.' + @TableName + '''
END CATCH')
END
EXECUTE sp_ExecuteSQL @SQL;
FETCH NEXT FROM DaftarTable INTO @SchemaName, @TableName
END
FETCH FIRST FROM DaftarTable INTO @SchemaName, @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
--Enable Semua Trigger
SET @SQL =
(SELECT 'ALTER TABLE '+ @SchemaName + '.' + @TableName + ' ENABLE TRIGGER ALL')
EXECUTE sp_ExecuteSQL @SQL;
IF @@ERROR = 0
BEGIN
PRINT 'Enabled Triggers ' + @SchemaName + '.' + @TableName +' Sukses !'
END
ELSE
BEGIN
PRINT 'Enabled Triggers ' + @SchemaName + '.' + @TableName +' Gagal :('
END
SET @SQL = (SELECT 'ALTER TABLE ' + @SchemaName + '.' + @TableName + ' CHECK CONSTRAINT ALL')
EXECUTE sp_ExecuteSQL @SQL;
IF @@ERROR = 0
BEGIN
PRINT ' Enabled Constraints ' + @SchemaName + '.' + @TableName +' Sukses !'
END
ELSE
BEGIN
PRINT ' Enabled Constraints ' + @SchemaName + '.' + @TableName +' Gagal :('
END
FETCH NEXT FROM DaftarTable INTO @SchemaName, @TableName
END
CLOSE DaftarTable
DEALLOCATE DaftarTable
END
dan untuk menjalankan/execute Store Procedure diatas adalah dengan menjalankan T-SQL berikut :
Setelah itu coba cek hasil dari eksekusi dari Store Procedure, bacalah baik-baik hasilnya.
Demikian Semoga bermanfaat.
Sumber : MSDN
Habis baca milis, ada yang nanya mengenai menghitung selisih waktu pembicaraan telepon, Jadi ‘gatel’ juga neh mau bikin UDF nya.
untuk menghitung selisih jam dapat menggunakan UDF yang saya buat dibawah ini. Namun tidak bisa menghitung lebih dari 24 jam, karena hanya menghitung sampe jam saja dengan format ‘hh”mm:ss’
Berikut UDF nya :
create function dbo.selisih_tanggal(@tgl1 datetime, @tgl2 datetime)
returns char(8)
as
begin
declare @selisih int, @jam int, @menit int, @detik int, @name_p char(8)
declare @Cjam char(2), @Cmenit char(2), @Cdetik char(2)
set @selisih = (select datediff(second,@tgl1,@tgl2))
if @selisih<86400
begin
set @jam= (select (@selisih/3600))
set @menit= (select (@selisih%3600)/60)
set @detik = (select ((@selisih%3600)%60))
begin
if @jam>9
set @Cjam = (select Cast(@jam as char(2)))
else
set @Cjam = '0'+(select Cast(@jam as char(1)))
end
begin
if @menit>9
set @Cmenit = (select Cast(@menit as char(2)))
else
set @Cmenit = '0'+(select Cast(@menit as char(1)))
end
begin
if @detik>9
set @Cdetik = (select Cast(@detik as char(2)))
else
set @Cdetik = '0'+(select Cast(@detik as char(1)))
end
set @name_p=@Cjam+':'+@Cmenit+':'+@Cdetik
end
else
begin
set @name_p='uncount!'
end
return @name_p
end
untuk memanggilnya dapat menggunakan T-SQL seperti contoh dibawah ini :
select dbo.selisih_tanggal('2009-01-21 01:15:00', '2009-01-21 13:30:30')
Selamat mencoba n Have Fun !!
Melakukan pekerjaan Backup untuk sebuah database adalah sebuah keharusan, tidak peduli database yang dikelola itu besar atau kecil. Hal ini dilakukan sebagai tindakan preventif apabila terjadi kerusakan atau kehilangan data. Apa jadinya ketika database kita mengalami kerusakan dan kita tidak memiliki Backup ? tentunya hal ini akan menjadi sebuah bencana besar.
Pada hakikatnya Backup itu adalah sebuah copy dari database production yang kita simpan di sebuah tempat/device yang sewaktu-waktu dapat kita panggil untuk direstore pada saat dibutuhkan. (ini menurut pendapat gue seh… )
Di Sql Server 2008, banyak fitur yang dapat digunakan untuk meminimalkan kehilangan data. Seperti Mirroring, Backup, Log Shipping yang kesemuanya dapat di ‘ramu’ menjadi sebuah skenario penyelamatan database.
Beberapa catatan kecil namun penting yang saya buat saat melakukan backup adalah :
- Hal yang penting dalam backup adalah adanya testing restore dari Backup yang dibuat. Pastikan bahwa Backup yang kita miliki dapat di restore, percuma kan kalo backupnya gak bisa direstore.
- Bila backup disimpan ke Disk, jangan pernah menyatukan Backup dengan Database data dan log dalam Disk yang sama. Sehingga bila disk yang digunakan untuk menyimpan database data dan log tidak bisa diakses, maka backup anda masih bisa terselamatkan.
- Bila menggunakan Differential Backup, perhatikan ukuran file yang terbentuk. Bila sama atau lebih dari ukuran file Full Backup, maka perkecil lagi jarak waktu antara Full Backup dan Differential Backup.
- Untuk Meminimalkan kehilangan data pada saat database production failure, selalu gunakan transaction log backup pada apapun strategi backup yang anda gunakan.
Geography Markup Language (GML) Merupakan sebuah XML yang difungsikan khusus untuk mempresentasikan sebuah informasi spatial. Seperti halnya sebuah bahasa XML, GML memiliki struktur dalam bahasa XML dalam mempresentasikan informasi spatial dimana setiap spesifik properti geografis memiliki spesifik tag XML.
Membuat Point dari GML
Sama dengan yang digunakan oleh format WKT dimana point mengacu pada koordinat Langitude dan Latitude. Contoh penulisan GML untuk menggambar sebuah point adalah sebagai berikut :
<point xmlns="http://www.opengis.net/gml">
<pos>15.30 -4.55</pos>
</point>
Untuk menggunakan GML bila hendak mempresentasikan Point dalam type data Geometry atau Geography di SQL Server 2008 dapat dilakukan dengan cara sebagai berikut:
Declare @gml xml;
set @gml = '
<Point xmlns="http://www.opengis.net/gml">
<pos>15.30 -4.55</pos>
</point>
';
Declare @Point Geometry;
set @Point = geometry::GeomFromGml(@gml, 4326)
Membuat LineString dari GML
Bila hendak membentuk LineString atau bentuk apapun yang terjadi oleh lebih dari satu point, maka contoh syntax GMLnya adalah sebagai berikut:
Misalkan kita akan menarik garis dari 2 buah titik yang mempunyai koordinat (3,5) dan (4,8). Maka syntax GML nya adalah
<LineString xmlns=”http://www.opengis.net/gml”>
<postList>3 5 4 8</post>
</LineString>
Membuat Polygon dari GML
Berikut ini adalah syntax membuat polygon dari GML
<Polygon xmlns=”http://www.opengis.net/gml”>
<exterior>
<LinearRing>
<postList>2 2 4 5 5 6 6 7 1 9 2 2<postList>
</LinearRing>
</exterior>
</Polygon>
Bagi temen-temen yang masih berkutat dengan tools-tools developer lawas seperti Visual Foxpro, Visual Basic 6.0 , ASP Classic atau tools developer non Microsoft seperti delphi, php programming biasanya membutuhkan syntax ConnectionString untuk dapat menggunakan database SQL Server.
Kebetulan dikantor saya masih menggunakan Visual Foxpro dan databasenya SQL Server 2008. Sehingga agar si Aplikasi dapat memanfaatkan fitur-fitur SQL Server 2008, maka connectionstring yang biasa kami gunakan kami ganti menggunakan SQL Server Native Client 10.0 .
Hal-hal baru yang terdapat di SQL Server Native Client 10.0 adalah :
- Table-Valued Parameters (SQL Server Native Client)
- Perbaikan pada Large CLR User-Defined Types
- FILESTREAM Support
- Service Principal Name (SPN) Support in Client Connections
- Sparse Columns Support in SQL Server Native Client
- Date/Time Improvements
SQL Server Native Client 10.0 dapat diperoleh dengan cara menginstal file sqlncli.msi yang ada didalam CD SQL Server 2008 anda. Install file tersebut dikomputer client anda, sehingga nantinya koleksi ODBC Driver anda akan bertambah.
ODBC SQL Server Native Client 10.0 akan berdiri berdampingan/side by side dengan ODBC SQL Server. ODBC SQL Server Native Client 10.0 support SQL Server 7.0 keatas.
Berikut ini adalah Connectionstring Standard Security dari ODBC SQL Server Native Client 10.0 :
Driver={SQL Server Native Client 10.0};Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
Berikut ini adalah Connectionstring Trusted Connection dari ODBC SQL Server Native Client 10.0 :
Driver={SQL Server Native Client 10.0};Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;
Well-Known Text adalah salah satu Standard format yang diakui oleh Open Geospatial Consortium (OGC) dalam hal pertukaran informasi spatial.
Berikut ini adalah Metode-metode untuk mempresentasikan Spatial objek dengan format WKT :
| Type Objek | Metode |
| Point | STPointFromText() |
| LineString | STLineFromText() |
| Polygon | STPolyFromText() |
| MultiPoint | STMPointFromText() |
| MultiLineString | STMLineFromText() |
| MultiPolygon | STMPolyFromText() |
| Geometry Collection | STGeomCollFromText() |
Apapun type objek yang akan dibuat, semua menggunakan format syntax yang sama yaitu :
datatype::method(geometrypresentation, srid)
| A. | Membuat Point dengan Format WKT |
| | WKT mempresentasikan point dari sistem koordinat Cartesian, yang dapat dilihat fungsinya seperti berikut : |
| | Point( X , Y ) |
| | Sedangkan untuk mempresentasikannya di koordinat geographic dapat dibuat seperti ini |
| | Point( Longitude Latitude ) |
| | Di SQL Server 2008 hal ini dapat dijalankan seperti ini : |
| | Declare @Bogor Geography
set @Bogor = geography::STPointFromText('POINT(6.59 106.79)',4326)
|
| B. |
Membuat LineString dengan Format WKT |
| |
LineString ini biasanya digunakan untuk menghubungkan antara 1 buah point dengan point yang lain. Misalkan saya akan menarik garis dari 2 buah titik yang mempresentasikan panjang jembatan Suramadu : |
| |
Declare @PanjangSuramadu geography
Set @PanjangSuramadu = geography::STLineFromText('LINESTRING(
-7.1109 112.6213,
-7.1106 112.7042
)',
4326)
|
| C. |
Membuat Polygon dengan Format WKT |
| |
Polygon sebenarnya hampir sama dengan LineString, namun Polygon bisa dibentuk oleh lebih dari 3 titik, dimana titik pertama dan titik terakhir memiliki koordinat yang sama. Berikut ini adalah contoh gambar polygon yang mempresentasikan Gedung Departemen Pertahanan Amerika Pentagon : |
| |
DECLARE @Pentagon geography
SET @Pentagon = geography::STPolyFromText(
'POLYGON(
(
-77.0532238483429 38.870863029297695,
-77.05478297004701 38.87304314667469,
-77.05788016319276 38.872800914712734,
-77.05849170684814 38.870219840133124,
-77.05556273460388 38.8690670969385,
-77.0532238483429 38.870863029297695
),
(-77.05582022666931 38.8702866652523,
-77.0569360256195 38.870737733163644,
-77.05673217773439 38.87170668418343,
-77.0554769039154 38.871848684516294,
-77.05491900444031 38.87097997215688,
-77.05582022666931 38.8702866652523
)
)',
4326
)
|
| |
|
Seperti yang pernah saya bahas sebelumnya bahwa SQL Server 2008 menyediakan 2 buah jenis type data spatial yaitu Geometry dan Geography.
Lalu bagaimana penentuan penggunaan jenis type data yang tepat dan dalam situasi apa. Mudah-mudahan beberapa point dibawah ini dapat memberikan petunjuk mengenai penentuan jenis type data spatial yang tepat untuk digunakan.
- Bila anda mendapatkan sumber data spatialnya bersumber dari GPS, Google Earth atau Virtual Earth yang telah memiliki informasi latitude dan longitude maka akan lebih tepat bila anda menggunakan type data spatial Geography.
- Bila anda mendapatkan sumber data spatial dari sebuah peta yang berbentuk datar dimana koordinat X dan Y nya telah disesuaikan sebagai bentuk arah angin timur dan utara dan telah diproyeksi sebelumnya dari geography coordinate menjadi sebuah peta datar, gunakan type data spatial Geometry
- Bila anda hendak membuat sebuah data spatial yang dibuat hanya berdasar pada koordinat X dan Y namun tidak merujuk pada peta bumi. gunakan type data spatial Geometry.
Menentukan type data spatial yang benar merupakan langkah yang paling awal harus diambil dalam pembuatan database spatial.
adalah hal yang tidak mungkin untuk mengkombinasikan type data spatial geometry dan geography dalam sebuah query yang sama. bila pun hal itu tetap dilakukan, SQL Server akan menghasilkan data NULL.
Perhatikan juga mengenai keakuratan data yang diinginkan. Bila anda bekerja dengan data Geometry yang berasal dari proyeksi peta Geography, maka semakin luas area yang kita kerjakan, maka semakin nilai akurasinya makin kecil.
Microsoft SQL Server 2008 memiliki 2 buah type data baru yang dibuat khusus untuk menyimpan spatial data. Tipe data tersebut adalah Geography dan Geometry.
Tipe data Geography digunakan untuk menyimpan spatial data jenis Vektor Geodetic sedangkan Geometry digunakan untuk menyimpan spatial data jenis Vektor Planar.
Untuk mengetahui Geodetic spatial reference systems yang disupport oleh SQL Server 2008 dapat dilakukan dengan melihat data yang tersimpan di tabel sys.spatial_reference_systems. Lakukan dengan T-SQL seperti ini :
select * from sys.spatial_reference_systems
Disana tersimpan juga informasi detail dari spatial reference menggunakan format Well-Known Text (WKT). WKT adalah standar industri untuk engekspresikan informasi spatial yang telah diakui oleh OGC (Open Geospatial Consortium).
Misalkan kita hendak melihat Geodetic spatial reference system yang biasa digunakan di sistem GPS, yaitu WGS 84. pada sys.spatial_reference_systems dapat kita temukan pada EPSG:4326 spatial reference. untuk dapat menemukannya, kita dapat melakukan query seperti ini :
select well_known_text from sys.spatial_reference_systems
where authority_name='EPSG'
and authorized_spatial_reference_id=4326
maka akan didapatkan data sebagai berikut :
GEOGCS[
"WGS 84",
DATUM["World Geodetic System 1984",
ELLIPSOID[
"WGS 84",
6378137,
298.257223563]],
PRIMEM[
"Greenwich", 0],
UNIT["Degree", 0.0174532925199433]]
dari data diatas dapat kita kenali bahwa Geographic Coordinate System yang digunakan adalah “WGS 84”. Geographic Coordinate System menunjukkan posisi dari object menggunakan angular coordinates yang biasa kita kenal juga dengan sebutan latitude dan longitude.
Tipe data Geometry memperlakukan data spatial sebagai sebuah flat object, sehingga apabila kita melakukan perhitungan jarak antara 2 buah titik, dapat dilakukan dengan perhitungan geometrik biasa.
Setiap objek yang ada akan dikenali posisinya menggunakan sistem koordinat Cartesian (X,Y).
More Posts
Next page »