it-swarm.asia

Apakah saya tetap bisa menaruh titik dalam nama database SQL Server?

Jika saya menggunakan nama database dengan titik di dalamnya di SQL Server (2005 atau 2008), sesuatu seperti "MyApp.Sales", apakah ini akan menimbulkan masalah?

28
Sean Kearon

Anda bisa, tapi saya tidak mau. Anda harus selalu membungkus nama DB dengan tanda kurung siku seperti [MyApp.Sales].

Jadi, rekapnya: jika Anda menghargai kewarasan Anda, jangan lakukan itu.

Saya pikir itu ide yang sangat buruk bahkan jika secara teknis memungkinkan.

Selama bertahun-tahun saya mengetahui bahwa banyak orang mengalami kesulitan memahami konvensi penamaan empat bagian meskipun tampaknya cukup jelas:

server_name.database_name.schema_name.object_name

Bayangkan apa yang akan terjadi jika mereka melihat sesuatu seperti ini:

MAIN-SQL.[MyApp.Sales].hr.CompetitorsProducts

atau:

[MAIN-SQL\EXPRESS].[MyApp.Sales].sch_HR.[Products From.Our-Competitors]

Menjaga segala sesuatu sederhana adalah penting.

36

Jika seseorang menemukan pertanyaan ini ...

Perlu diingat bahwa ini bukan hanya ide yang buruk karena pengguna mungkin bingung, tetapi juga karena beberapa alat mungkin bingung.

Bahkan Microsoft sendiri memiliki masalah dengan ini. Jika Anda mencoba menyambungkan database Anda ke lembar Excel menggunakan Microsoft Query (via ODBC), Anda mendapatkan panduan konfigurasi yang memungkinkan Anda memilih database yang ingin Anda sambungkan. Namun memilih database yang berisi titik akan menghasilkan kesalahan yang menyatakan bahwa server tidak dapat ditemukan. Tampaknya bahwa penyihir tidak memeriksa apakah nilai-nilai perlu melarikan diri dan membabi buta menggabungkan pengidentifikasi.

Tentu saja ada tempat kerja, tetapi Anda menyelamatkan diri dari beberapa masalah dengan tidak melakukan ini sejak awal.

15
aKzenT

Jangan gunakan periode dalam nama database, nama publikasi, nama pengguna. Dan saya sangat menyarankan untuk tidak menggunakan periode dalam nama (kolom, tabel, tampilan, database, dll).

Pembaruan: Saya dapat mengonfirmasi, bahwa tanda minus, tanda hubung "-" menyebabkan masalah yang sama.

Inilah yang terjadi:

SQL Server menggunakan skrip untuk penggunaan internal seperti prosedur yang tersimpan sistem. Seperti yang telah disebutkan di sini, perintah yang Anda gunakan kadang-kadang akan memaksa Anda untuk memasukkan nama ke dalam tanda kurung dan itu adalah (serius microsoft?) bukan (selalu) oke untuk penggunaan prosedur tersimpan .

Sebenarnya saya tidak dapat lagi membersihkan informasi yang terkait karena prosedur tersimpan berulang melalui semua database dan tidak luput dari nama-nama database dengan benar. Iterasi ini adalah kompleks yang saya tidak dapat menambalnya di lebih dari 8 SP.

Ditambah lagi saya tidak dapat menggunakan MMC atau skrip untuk mengedit konflik replikasi . Jika Anda punya satu (Satu!) database yang memiliki titik di dalam namanya, masalah ini akan terjadi pada everey db, setiap publikasi.

Ini adalah kejadian yang saya miliki. Tindakan SQL kompleks diproses dalam bahasa sql dan akan berfungsi dengan baik, jika basisnya baik-baik saja.

Jika Anda mencoba untuk menghubungkan database Anda ke lembar Excel menggunakan Microsoft Query (via ODBC), Anda mendapatkan panduan konfigurasi yang memungkinkan Anda memilih database yang ingin Anda sambungkan. - aKzenT

Kesalahan ini lebih sering ditemukan di perangkat lunak pihak ke-3, jadi tidak pernah menggunakan titik di setiap nama apa pun di server sql.

8
Daniel

Ada banyak karakter yang diizinkan dalam nama, tetapi, konvensi dan akal sehat membatasi penggunaan karakter khusus. '_' (garis bawah) adalah pemisah teraman dan terbukti mudah dibaca.

7
user48235

Kesepakatan yang sama: nama kunci asing tidak boleh mengandung titik.

Saya menemukan bahwa jika Anda perlu mengubah nama seperti itu maka Anda perlu tanda kurung untuk membuat sp_rename kerja (karena saat Anda mengganti nama kunci Asing Anda perlu menentukan skema).

Contoh:

sp_rename '[MySchema].[MyFKName.With.Dots]' 'NewFKName' 'OBJECT'

Jika Anda lupa tanda kurung, Anda mendapatkan kesalahan: 15225

1
Ozzie