Sql-Server

‘CONCAT’ 不是可辨識的內置函式名稱

  • March 27, 2019

一個客戶報告說他們在 SQL Server 2012 上執行,我們在最終傳遞之前傳遞了一些測試查詢以進行測試,但是:

‘CONCAT’ 不是可辨識的內置函式名稱。

我知道這CONCAT()是 SQL Server 2012 中引入的一個新的內置函式,一切都很好,但是我被要求回滾我的更改以使這個 2008R2 兼容以“執行查詢的使用者可能不具有執行 Transact-SQL 權限。” 因此,我只是在證明我的觀點,即客戶端很可能在 DEV 中安裝的 SQL Server 版本與在 PROD 中安裝的版本不同。

我找不到任何關於專門拒絕SELECT/EXECUTE內置標量值函式的權限的資訊,但有可能嗎,如果是這樣,使用者是否仍會收到相同的錯誤文本?

CONCAT在 SQL Server 2012 中引入;沒有辦法讓它在 SQL Server 2008 R2 中工作。從文件中

在此處輸入圖像描述

即使在兼容性級別,也沒有辦法讓它在 2012+ 中失敗。所以讓你的人檢查SELECT @@VERSION;兩台伺服器;您會發現CONCAT失敗的地方是 < 11。為了使您的程式碼與早期版本兼容,您需要使用標準的字元串連接運算符 ( +)。我不知道你將如何使用標量函式來做到這一點,除非你總是使用完全相同數量的輸入字元串並且你改變你的程式碼來使用dbo.CONCAT()而不是CONCAT()(會有重要的場景,加上如果你的函式做任何事情本機不這樣做,如果/當您升級時,您需要一致的行為)。所以我不會推薦這種方法。您可能還需要添加NULL處理和其他小的更改(如果我們看不到,就不可能告訴您如何準確更改現有腳本)。

引用自:https://dba.stackexchange.com/questions/127928