it-swarm.it

'CONCAT' non è un nome di funzione incorporato riconosciuto

Un client ha riferito di essere in esecuzione su SQL Server 2012 e abbiamo inviato alcune query di test per i test prima di un recapito finale, tuttavia:

'CONCAT' non è un nome di funzione incorporato riconosciuto.

Comprendo che CONCAT() è una nuova funzione integrata introdotta in SQL Server 2012, che va bene e va bene, tuttavia mi è stato chiesto di ripristinare la mia modifica per rendere compatibile questo 2008R2 con il pretesto di " l'utente che esegue la query potrebbe non disporre delle autorizzazioni Transact-SQL da eseguire. " Quindi sto solo dimostrando il mio punto che molto probabilmente sul client è installata una versione diversa di SQL Server in DEV rispetto a loro in PROD.

Non riesco a trovare alcuna informazione sulla negazione specifica di SELECT/EXECUTE autorizzazioni per funzioni scalare integrate, ma è possibile e in tal caso l'utente riceve ancora lo stesso testo di errore?

27
beeks

CONCAT è stato introdotto in SQL Server 2012; non c'è modo di farlo funzionare in SQL Server 2008 R2. Da la documentazione :

enter image description here

Inoltre, non c'è modo di farlo fallire nel 2012+, anche con un livello di compatibilità. Quindi chiedi al tuo personale di controllare SELECT @@VERSION; Su entrambi i server; scoprirai che dove CONCAT fallisce è <11. Per rendere il tuo codice compatibile con le versioni precedenti, dovrai usare l'operatore di concatenazione di stringhe standard (+). Non so come lo faresti con una funzione scalare, a meno che tu non abbia sempre usato lo stesso numero di stringhe di input esatta e si modifica il codice per utilizzare dbo.CONCAT() anziché CONCAT() (ci saranno scenari in cui è importante, inoltre se la funzione fa qualcosa che il nativo non fa , desideri un comportamento coerente se/quando esegui l'aggiornamento). Quindi non consiglierei questo approccio. Potrebbe anche essere necessario aggiungere la gestione NULL e altre modifiche minori (impossibile dirti come modificare esattamente lo script esistente, se non riusciamo a vederlo).

21
Aaron Bertrand

È possibile utilizzare la funzione ODBC CONCAT in questo modo:

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

Il problema è che questa funzione consente solo due parametri alla volta. Quindi, a meno che tu non voglia usarne più di due in questo modo:

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

Potresti anche usare l'operatore '+'.

4
bfs