sql-server – ‘CONCAT’不是公认的内置函数名

客户报告他们在sql Server 2012上运行,但我们在最终交付之前提供了一些测试查询以进行测试,但是:

‘CONCAT’ is not a recognized built-in function name.

我知道CONCAT()是sql Server 2012中引入的一个新的内置函数,它很好并且很好,但是我被要求回滚我的更改以使“2008R2兼容”的幌子是“用户执行查询可能没有Transact-sql权限来执行.“所以我只是证明了我的观点,即客户端很可能在DEV中安装了与在PROD中安装的不同版本的sql Server.

我找不到任何关于明确拒绝内置标量值函数的SELECT / EXECUTE权限的信息,但它是否可能,如果是这样,用户仍会收到相同的错误文本?

解决方法

CONCAT是在sql Server 2012中引入的;没有办法使它在sql Server 2008 R2中工作.从 the documentation开始:

07001

即使在兼容性方面,2012年也无法让它失败.那么请你的人检查SELECT @@ VERSION;在两台服务器上;你会发现CONCAT失败的地方是< 11.为了使您的代码与早期版本兼容,您需要使用标准字符串连接运算符().我不知道如何使用标量函数执行此操作,除非您始终使用完全相同数量的输入字符串并且您更改代码以使用dbo.CONCAT()而不是CONCAT()(将会出现这样的情况重要的是,如果您的函数执行本机不执行的任何操作,则在升级时需要一致的行为.所以我不推荐这种方法.您可能还需要添加NULL处理和其他微小更改(如果我们看不到它,则无法告诉您如何准确地更改现有脚本).

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...