Seorang klien melaporkan bahwa mereka berjalan pada SQL Server 2012, dan kami mengirimkan beberapa pertanyaan pengujian untuk pengujian sebelum pengiriman akhir, namun:
'CONCAT' bukan nama fungsi bawaan yang diakui.
Saya mengerti bahwa CONCAT()
ini adalah fungsi bawaan baru yang diperkenalkan dalam SQL Server 2012, yang semuanya baik-baik saja, namun saya telah diminta untuk mengembalikan perubahan saya untuk membuat 2008R2 ini kompatibel dengan kedok "pengguna yang menjalankan kueri mungkin tidak memiliki izin Transact-SQL untuk dieksekusi. " Jadi saya hanya membuktikan maksud saya bahwa klien kemungkinan besar memiliki versi SQL Server berbeda yang diinstal di DEV daripada yang mereka lakukan di PROD.
Saya tidak dapat menemukan informasi tentang penolakan SELECT/EXECUTE
izin khusus untuk fungsi bernilai skalar bawaan, tetapi apakah itu mungkin, dan jika demikian apakah pengguna masih menerima teks kesalahan yang sama?
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
Jawaban:
CONCAT
diperkenalkan di SQL Server 2012; tidak ada cara untuk membuatnya bekerja di SQL Server 2008 R2. Dari dokumentasi :Juga tidak ada cara untuk membuatnya gagal di 2012+, bahkan dengan tingkat kompatibilitas. Jadi mintalah orang-orang Anda memeriksa
SELECT @@VERSION;
kedua server; Anda akan menemukan bahwa di manaCONCAT
kegagalannya adalah <11. Untuk membuat kode Anda kompatibel dengan versi sebelumnya, Anda harus menggunakan operator penggabung string standar (+
). Saya tidak tahu bagaimana Anda akan melakukan ini dengan fungsi skalar, kecuali jika Anda selalu menggunakan jumlah string input yang sama persis dan Anda mengubah kode Anda untuk digunakandbo.CONCAT()
sebagai gantinyaCONCAT()
(akan ada skenario di mana itu penting, ditambah jika fungsi Anda melakukan apa pun yang asli tidak melakukannya, Anda ingin perilaku yang konsisten jika / ketika Anda meningkatkan). Jadi saya tidak akan merekomendasikan pendekatan itu. Anda mungkin juga perlu menambahkanNULL
penanganan dan perubahan kecil lainnya (tidak mungkin memberi tahu Anda cara mengubah skrip yang ada dengan tepat, jika kami tidak dapat melihatnya).sumber
CONCAT()
, tidak. Saya tidak cukup mengikuti apa yang ada pada apa yang perlu Anda lakukan untuk membuat kode bekerja pada 2008 R2. Anda harus menghapusCONCAT()
, bukan menambahkannya.DENY
mengakses fungsi ini.Anda dapat menggunakan fungsi ODBC CONCAT seperti ini:
Masalah dengan ini adalah bahwa fungsi ini hanya memungkinkan Anda dua parameter sekaligus. Jadi kecuali Anda ingin menggunakan lebih dari dua seperti ini:
Anda mungkin juga cukup menggunakan operator '+'.
sumber