Ein Client hat gemeldet, dass sie unter SQL Server 2012 ausgeführt werden, und wir haben vor einer endgültigen Übermittlung einige Testabfragen zum Testen übermittelt.
'CONCAT' ist kein anerkannter eingebauter Funktionsname.
Ich verstehe, dass dies CONCAT()
eine neue integrierte Funktion ist, die in SQL Server 2012 eingeführt wurde, die alles in Ordnung und in Ordnung ist. Ich wurde jedoch gebeten, meine Änderung rückgängig zu machen, um diese 2008R2-kompatibel zu machen, unter dem Deckmantel, dass der Benutzer, der die Abfrage ausführt, dies möglicherweise nicht tut Transact-SQL-Berechtigungen zum Ausführen haben. " Ich möchte nur beweisen, dass auf dem Client höchstwahrscheinlich eine andere Version von SQL Server in DEV installiert ist als in PROD.
Ich kann keine Informationen darüber finden, wie SELECT/EXECUTE
Berechtigungen für integrierte skalare Funktionen speziell verweigert werden. Ist dies jedoch möglich, und wenn ja, erhält der Benutzer immer noch denselben Fehlertext?
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
Antworten:
CONCAT
wurde in SQL Server 2012 eingeführt; In SQL Server 2008 R2 ist dies nicht möglich. Aus der Dokumentation :Es gibt auch keine Möglichkeit, es 2012+ zum Scheitern zu bringen, selbst wenn die Kompatibilitätsstufe erreicht ist. Lassen Sie also Ihre Mitarbeiter
SELECT @@VERSION;
auf beiden Servern nachsehen. Sie werden feststellen, dass derCONCAT
Fehler <11 ist. Um Ihren Code mit früheren Versionen kompatibel zu machen, müssen Sie den Standardoperator für die Verkettung von Zeichenfolgen (+
) verwenden. Ich weiß nicht, wie Sie dies mit einer Skalarfunktion tun würden, es sei denn, Sie haben immer genau die gleiche Anzahl von Eingabezeichenfolgen verwendet und Sie ändern Ihren Code, umdbo.CONCAT()
anstelle vonCONCAT()
(es wird Szenarien geben, in denen es wichtig ist, und wenn Ihre Funktion etwas tut) Der Native tut dies nicht. Sie möchten ein konsistentes Verhalten, wenn / wenn Sie ein Upgrade durchführen. Daher würde ich diesen Ansatz nicht empfehlen. Möglicherweise müssen Sie auch hinzufügenNULL
Handhabung und andere kleinere Änderungen (Sie können nicht genau sagen, wie Sie Ihr vorhandenes Skript ändern sollen, wenn wir es nicht sehen können).quelle
CONCAT()
, nein. Ich verstehe jedoch nicht genau, welche Auswirkungen dies auf Ihre Arbeitsweise hat, damit der Code unter 2008 R2 funktioniert. Sie müssen es entfernenCONCAT()
, nicht hinzufügen.DENY
auf diese Funktion zugreifen kann.Sie können die ODBC-CONCAT-Funktion folgendermaßen verwenden:
Das Problem dabei ist, dass diese Funktion nur zwei Parameter gleichzeitig zulässt. Es sei denn, Sie möchten mehr als zwei davon verwenden:
Sie können auch einfach den Operator '+' verwenden.
quelle