' CONCAT ' nu este un nume de funcție încorporat recunoscut
On februarie 17, 2021 by adminUn client a raportat că rulează pe SQL Server 2012 și am livrat câteva interogări de testare pentru testare înainte de o livrare finală, totuși:
” CONCAT „nu este un nume de funcție încorporat recunoscut.
Înțeleg că CONCAT()
este o versiune nouă construită -în funcția introdusă în SQL Server 2012, care este foarte bine, totuși mi s-a cerut să revin la modificarea mea pentru a face acest 2008R2 compatibil sub masca „utilizatorul care execută interogarea poate să nu aibă permisiuni Transact-SQL pentru a executa . ” Așa că îmi dovedesc punctul de vedere că clientul are cel mai probabil o versiune diferită de SQL Server instalată în DEV decât în PROD.
Nu pot găsi informații despre refuzul specific SELECT/EXECUTE
permisiuni pentru funcțiile scalare încorporate, dar este posibil și dacă da, utilizatorul primește în continuare același text de eroare?
Comentarii
- Dacă concat nu funcționează, încercați acesta
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
- CONCAT acceptă concat tip zecimal (ID + ' _ ' + OtherID), ID-ul poate fi de tip int.
- În versiunile mai vechi, utilizați acest lucru în schimb:
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
Răspuns
CONCAT
în SQL Server 2012; nu există nicio modalitate de a-l face să funcționeze în SQL Server 2008 R2. Din documentația :
De asemenea, nu există nicio modalitate de a face eșecul în 2012+, chiar și cu un nivel de compatibilitate. Așa că oamenii tăi verifică SELECT @@VERSION;
pe ambele servere; veți descoperi că în cazul în care CONCAT
eșuează, este < 11. Pentru a face codul dvs. compatibil cu versiunile anterioare, veți avea nevoie de pentru a utiliza operatorul de concatenare șir standard (+
). Nu știu cum ați face acest lucru cu o funcție scalară, cu excepția cazului în care ați folosit întotdeauna exact același număr de șiruri de intrare și vă modificați codul pentru a utiliza dbo.CONCAT()
în loc de CONCAT()
(vor exista scenarii în care contează, plus dacă funcția dvs. face ceva ce nu face nativul, doriți un comportament consecvent dacă / când faceți upgrade). Așadar, nu aș recomanda această abordare. Este posibil să fie necesar să adăugați tratamentul NULL
și alte modificări minore (imposibil să vă spun cum să schimbați exact scriptul dvs. existent, dacă nu putem „t vezi).
Comentarii
Răspundeți
Puteți utiliza funcția ODBC CONCAT astfel :
SELECT {fn CONCAT("foo ", "test") }
Problema cu aceasta este că această funcție vă permite doar doi parametri la un moment dat. Deci, dacă nu doriți să utilizați mai mult de două astfel:
SELECT {fn CONCAT("foo ", {fn CONCAT("test ", "buddy")}) }
S-ar putea De asemenea, utilizați doar operatorul „+”.
CONCAT()
, nr. Totuși, ' nu urmăresc ce influență are asupra a ceea ce trebuie să faceți pentru ca codul să funcționeze pe 2008 R2. Trebuie să eliminațiCONCAT()
, să nu-l adăugați.DENY
accesa la această funcție.