Kemarin saya frustrasi dengan tidak sinkronnya database. Perpustakaan yang digunakan untuk pengembangan dan pengujian tidak sama. Di perpustakaan yang dikembangkan, prosedur tersimpan sering diperbarui. Terkadang bahkan struktur tabel pun berubah.
Hal ini menyebabkan banyak masalah. Untuk sementara, saya tidak tahu apa masalah spesifiknya, yang membuat saya sangat malu. Tiba-tiba saya ingin menulis sebuah program untuk membandingkan perbedaan antara kedua perpustakaan tersebut untuk memfasilitasi pengujian dan implementasi.
Pagi ini, saya menulis sambil mengadakan rapat, dan lulus ujian pada siang hari.
Terutama dua pernyataan SQL:
SQL dengan struktur tabel dan tampilan serta atribut kolom yang berbeda di perpustakaan kueri adalah sebagai berikut:
pilih A. [nama] sebagai Nama Tabel,
B. [nama] sebagai Colname,
B.xtipe,
B.xusertype,
B.panjang,
B.kolid,
B.cdefault,
B.domain,
B.nomor,
B.mengimbangi,
B.status,
B.tipe,
B.tipe pengguna,
B.prec,
B.skala,
B.dihitung,
B.isoutparam,
B. tidak dapat dibatalkan,
C.COLUMN_DEFAULT,
dbo.fnIsColumnPrimaryKey(B.[ID], B.[nama]) sebagai PKey
dari sysobjects A, syscolumns B, INFORMATION_SCHEMA .COLUMNS C
dimana a.id = B.id
dan A.xketik ('u', 'v')
dan A. Nama = C.TABLE_NAME
dan B. Nama = C.COLUMN_NAME
dipesan oleh A. [ID], B. [Nama]
///////
Arti dari masing-masing kolom adalah sebagai berikut
name sysname Nama kolom atau nama parameter prosedur.
id int ID objek tabel yang menjadi milik kolom ini, atau ID prosedur tersimpan yang terkait dengan parameter ini.
xtype tinyint Jenis penyimpanan fisik di systypes.
typestat tinyint Hanya untuk penggunaan internal.
xusertype smallint ID tipe data yang ditentukan pengguna diperluas.
length smallint Panjang penyimpanan fisik maksimum dalam sistem.
xprec tinyint hanya untuk penggunaan internal.
xscale tinyint Hanya untuk penggunaan internal.
kolom colid smallint atau ID parameter.
xoffset smallint Hanya untuk penggunaan internal.
bitpos tinyint hanya untuk penggunaan internal.
hanya penggunaan internal tinyint yang dicadangkan.
colstat smallint Hanya untuk penggunaan internal.
cdefault int ID nilai default kolom ini.
domain int Aturan atau PERIKSA ID batasan kolom ini.
number smallint Nomor sub-proses ketika proses dikelompokkan (0 menunjukkan item non-proses).
colorder smallint Hanya untuk penggunaan internal.
autoval varbinary(255) Hanya untuk penggunaan internal.
offset smallint Offset baris di mana kolom ini berada; jika negatif, menunjukkan baris dengan panjang variabel.
status tinyint Bitmap yang menjelaskan atribut kolom atau parameter:
0x08 = Kolom mengizinkan nilai nol.
0x10 = Padding ANSI berlaku saat menambahkan kolom varchar atau varbinary. Mempertahankan spasi tambahan untuk kolom varchar dan angka nol tambahan untuk kolom varbinary.
0x40 = Parameternya adalah parameter OUTPUT.
0x80 = Kolom adalah kolom identitas.
ketik tinyint Jenis penyimpanan fisik di systypes.
usertype smallint ID tipe data yang ditentukan pengguna di systypes.
printfmt varchar(255) Hanya untuk penggunaan internal.
prec smallint Tingkat presisi kolom ini.
scale int Jumlah tempat desimal untuk kolom ini.
iscomputed int Bendera yang menunjukkan apakah kolom telah dihitung:
0 = tidak dihitung.
1 = Dihitung.
isoutparam int menunjukkan apakah parameter prosedur merupakan parameter keluaran:
1 = benar.
0 = salah.
int yang tidak dapat dibatalkan menunjukkan apakah kolom mengizinkan nilai nol:
1 = benar.
0 = salah.
COLUMN_DEFAULT nilai bawaan
Kunci Utama PKey.
////////
Fungsi-fungsi berikut digunakan:
--------------------------
BUAT FUNGSI dbo.fnIsColumnPrimaryKey(@sTableID int, @nColumnName varchar(128))
--mengubah FUNGSI dbo.fnIsColumnPrimaryKey(@sTableName varchar(128), @nColumnName varchar(128))
PENGEMBALIAN sedikit
SEBAGAI
MULAI
DEKLARASIKAN @nTableID ke dalam,
@nIndexID ke dalam,
@ saya masuk
SET @nTableID = @sTableID--OBJECT_ID(@sTableName)
PILIH @nIndexID = indid
DARI sysindex
DIMANA id = @nTableID
DAN menunjukkan ANTARA 1 Dan 254
DAN (status & 2048) = 2048
JIKA @nIndexID Adalah Null
KEMBALI 0
JIKA @nColumnName IN
(PILIH sc.[nama]
DARI sysindexkeys sik
INNER JOIN syscolumns sc ON sik.id = sc.id DAN sik.colid = sc.colid
DIMANA sik.id = @nTableID
DAN sik.indid = @nIndexID)
MULAI
KEMBALI 1
AKHIR
KEMBALI 0
AKHIR
--------------------------
Melalui pernyataan SQL ini, Anda dapat mengetahui atribut kolom dari semua tabel di database.
Dengan mengeksekusi pernyataan SQL ini masing-masing dua kali, atribut kolom di kedua perpustakaan dapat diambil dan dibandingkan.
--------------------------------------------------- ---------------
Untuk prosedur dan fungsi tersimpan gunakan pernyataan SQL berikut:
pilih * dari sysobjects di mana xtype in ('P','TF','IF','FN') diurutkan berdasarkan [Nama]
Semua nama prosedur dan fungsi tersimpan dapat ditanyakan. Hasil dari query loop,
Di setiap loop, fungsi atau nama prosedur tersimpan disimpan dalam string SpobjectName, dan kemudian prosedur tersimpan disebut: sp_helptext adalah sebagai berikut:
exec sp_helptext '"+SpoobjectName+"'
Mengembalikan tabel yang berisi konten teks dalam prosedur tersimpan SpobjectName. Satu baris teks dalam prosedur tersimpan berhubungan dengan satu baris dalam tabel.
Jalankan semua SP dan fungsi dengan exec sp_helptext untuk mendapatkan kode semua prosedur dan fungsi yang tersimpan.
Masukkan saja hasilnya ke dalam tabel dan bandingkan persamaan dan perbedaannya.
Referensi: Buku SQL Server Online
<Pembuatan otomatis prosedur tersimpan dalam database>( http://www.vckbase.com/document/viewdoc/?id=1111 )
Sekarang kita hanya membandingkan atribut kolom tabel dan tampilan, serta prosedur dan fungsi tersimpan.
Hubungan kendala antara tabel perbandingan tidak diterapkan.
Akan ditambahkan nanti.