it-swarm.asia

'CONCAT' bukan nama fungsi bawaan yang diakui

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() adalah fungsi built-in baru yang diperkenalkan di 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 mengeksekusi kueri mungkin tidak memiliki izin Transact-SQL untuk dieksekusi. " Jadi saya hanya membuktikan maksud saya bahwa klien kemungkinan besar memiliki versi berbeda dari SQL Server yang diinstal di DEV daripada yang mereka lakukan di PROD.

Saya tidak dapat menemukan informasi tentang penyangkalan khusus SELECT/EXECUTE izin untuk fungsi bernilai skalar bawaan, tetapi apakah mungkin, dan jika demikian apakah pengguna masih menerima teks kesalahan yang sama?

27
beeks

CONCAT diperkenalkan di SQL Server 2012; tidak ada cara untuk membuatnya bekerja di SQL Server 2008 R2. Dari dokumentasi :

enter image description here

Juga tidak ada cara untuk membuatnya gagal di 2012+, bahkan dengan tingkat kompatibilitas. Jadi mintalah orang-orang Anda memeriksa SELECT @@VERSION; Di kedua server; Anda akan menemukan bahwa di mana CONCAT gagal, <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 tepat jumlah string input yang sama dan Anda mengubah kode Anda untuk menggunakan dbo.CONCAT() alih-alih CONCAT() (akan ada skenario di mana itu penting, ditambah jika fungsi Anda melakukan apa pun yang tidak dilakukan oleh penduduk asli, Anda ingin perilaku yang konsisten jika/ketika Anda meningkatkan). Jadi saya tidak akan merekomendasikan pendekatan itu. Anda juga mungkin perlu menambahkan NULL penanganan dan perubahan kecil lainnya (tidak mungkin memberi tahu Anda cara mengubah skrip yang ada dengan tepat, jika kami tidak dapat melihatnya).

21
Aaron Bertrand

Anda dapat menggunakan fungsi ODBC CONCAT seperti ini:

SELECT {fn CONCAT('foo ', 'test') }

Masalah dengan ini adalah bahwa fungsi ini hanya memungkinkan Anda dua parameter sekaligus. Jadi, kecuali jika Anda ingin menggunakan lebih dari dua seperti ini:

SELECT {fn CONCAT('foo ', {fn CONCAT('test ', 'buddy')}) }

Anda mungkin juga cukup menggunakan operator '+'.

4
bfs