' CONCAT ' non è un nome di funzione integrato riconosciuto
Su Febbraio 17, 2021 da adminUn client ha riferito di essere in esecuzione su SQL Server 2012 e tuttavia abbiamo fornito alcune query di test per il test prima della consegna finale:
” CONCAT “non è un nome di funzione integrato riconosciuto.
Capisco che CONCAT()
sia un nuovo -in funzione introdotta in SQL Server 2012, che va tutto bene, tuttavia mi è stato chiesto di ripristinare la mia modifica per rendere questo 2008R2 compatibile con il pretesto di “lutente che esegue la query potrebbe non disporre delle autorizzazioni Transact-SQL per lesecuzione . ” Quindi sto solo dimostrando che il client molto probabilmente ha una versione diversa di SQL Server installata in DEV rispetto a quella in PROD.
Non riesco a trovare alcuna informazione sulla negazione specifica di SELECT/EXECUTE
autorizzazioni per funzioni con valori scalari incorporate, ma è possibile e, in caso affermativo, lutente continua a ricevere lo stesso testo di errore?
Commenti
Risposta
CONCAT
è stata introdotta in SQL Server 2012; non è possibile farlo funzionare in SQL Server 2008 R2. Da la documentazione :
Non cè modo di farlo fallire nel 2012+, anche con il livello di compatibilità. Quindi chiedi ai tuoi collaboratori di controllare SELECT @@VERSION;
su entrambi i server; scoprirai che dove CONCAT
fallisce è < 11. Per rendere il tuo codice compatibile con le versioni precedenti, avrai bisogno per utilizzare loperatore di concatenazione di stringhe standard (+
). Non so come faresti con una funzione scalare, a meno che tu non abbia sempre utilizzato lo stesso numero esatto di stringhe di input e modifichi il codice per utilizzare dbo.CONCAT()
invece di CONCAT()
(ci saranno scenari in cui conta, inoltre se la tua funzione fa qualcosa che il nativo non fa, vuoi un comportamento coerente se / quando esegui laggiornamento). 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 possiamo “t guardalo).
Commenti
- Grazie, Aaron. Il codice è banale da modificare, poiché CONCAT () viene utilizzato solo per unire alcune stringhe prima di una chiamata SQL dinamica SP_ExecuteSQL. Volevo solo confermare che NON cera modo di negare laccesso allutilizzo di CONCAT () in SQL Server 2012
- @beeks I don ' non ne conosco modo per negare agli utenti la possibilità di utilizzare
CONCAT()
, no. Tuttavia, non ' t seguire esattamente ciò che influisce su ciò che è necessario fare per far funzionare il codice su 2008 R2. Devi rimuovereCONCAT()
, non aggiungerlo. - sì, ho capito come rendere il codice compatibile con 2008 R2, che è banale. Grazie per aver confermato che non è possibile
DENY
accedere a questa funzione. - Solo per notare quando si modifica il concat in + tu ' Dovrà assicurarsi che i valori che vengono concatenati siano stringhe per cominciare, se hai dei campi numerici proverà ad aggiungerli (e fallirà perché una stringa non è un int) quindi se cè un campo numerico (tipo) fai assicurati di convertirlo / trasmetterlo prima a una stringa
Answer
Puoi usare la funzione CONCAT ODBC come questa :
SELECT {fn CONCAT("foo ", "test") }
Il problema è che questa funzione ti consente solo due parametri Al tempo. Quindi, a meno che tu non voglia usarne più di due in questo modo:
SELECT {fn CONCAT("foo ", {fn CONCAT("test ", "buddy")}) }
Potresti inoltre usa loperatore “+”.
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;