Клиент сообщил, что он работает на SQL Server 2012, и мы передали несколько тестовых запросов для тестирования до окончательной доставки:
«CONCAT» не является распознанным именем встроенной функции.
Я понимаю, что CONCAT()
это новая встроенная функция, представленная в SQL Server 2012, и все в порядке, но меня попросили откатить изменения, чтобы сделать этот 2008R2 совместимым под видом «пользователь, выполняющий запрос, может не иметь разрешения Transact-SQL для выполнения. " Так что я просто доказываю, что клиент, скорее всего, имеет другую версию SQL Server, установленную в DEV, чем в PROD.
Я не могу найти никакой информации о конкретном отказе в SELECT/EXECUTE
разрешениях для встроенных скалярных функций, но возможно ли это, и если да, то получает ли пользователь тот же текст ошибки?
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
Ответы:
CONCAT
был введен в SQL Server 2012; нет способа заставить его работать в SQL Server 2008 R2. Из документации :Также нет способа заставить его выйти из строя в 2012+, даже с уровнем совместимости. Так пусть ваши люди проверят
SELECT @@VERSION;
на обоих серверах; вы обнаружите, что там, где происходитCONCAT
сбой, он составляет <11. Чтобы сделать ваш код совместимым с более ранними версиями, вам нужно использовать стандартный оператор конкатенации строк (+
). Я не знаю , как вы могли бы сделать это с помощью скалярной функции, если вы всегда использовали точное такое же количество входных строк и изменить код , чтобы использоватьdbo.CONCAT()
вместоCONCAT()
(там будет сценарии , где это имеет значение, а также , если ваша функция ничего не делает нативный не делает, вы хотите последовательное поведение, если / когда вы обновляете). Поэтому я бы не рекомендовал такой подход. Вам также может понадобиться добавитьNULL
обработка и другие незначительные изменения (невозможно сказать, как точно изменить существующий скрипт, если мы его не видим).источник
CONCAT()
, нет. Я не совсем понимаю, какое отношение это имеет к тому, что вам нужно сделать, чтобы заставить код работать на 2008 R2, хотя. Вы должны удалитьCONCAT()
, а не добавить его.DENY
получить доступ к этой функции.Вы можете использовать функцию ODBC CONCAT следующим образом:
Проблема в том, что эта функция позволяет вам одновременно использовать только два параметра. Так что, если вы не хотите использовать более двух, как это:
Вы можете также использовать оператор «+».
источник