sp_executesql 使用复杂的Unicode 表达式错误的解决方法

Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '+'.

当你尝试执行下面这段代码时,会得到如上这个错误提示。


代码如下:

DECLARE @MyName NVARCHAR(100)
DECLARE @FieldName SYSNAME = N'Name'
EXECUTE sp_executesql N'SELECT TOP 1 @OutputName = ['+ @FieldName +'] FROM [dbo].[Member]',
N'@OutputName NVARCHAR(100) OUTPUT',
@MyName OUTPUT;
SELECT @MyName

问题出于不允许使用更复杂的 Unicode 表达式(例如使用 + 运算符连接两个字符串)。可以参考:http://technet.microsoft.com/zh-cn/library/ms188001.aspx
[ @statement = ] statement
包含 Transact-SQL 语句或批处理的 Unicode 字符串。statement 必须是 Unicode 常量或 Unicode 变量。不允许使用更复杂的 Unicode 表达式(例如使用 + 运算符连接两个字符串)。不允许使用字符常量。如果指定了 Unicode 常量,则必须使用 N 作为前缀。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 则无效。字符串的大小仅受可用数据库服务器内存限制。在 64 位服务器中,字符串大小限制为 2 GB,即 nvarchar(max) 的最大大小。

解决问题,可以宣告一个变量如下代码DECLARE @sql NVARCHAR(MAX),把带动态的数据名,表名或是字段的SQL语句赋值于这个变量, 然后用这个变量传入sp_executesql中。


代码如下:

DECLARE @MyName NVARCHAR(100)
DECLARE @FieldName SYSNAME = N'Name'
DECLARE @sql NVARCHAR(MAX) = N'SELECT TOP 1 @OutputName = ['+ @FieldName +'] FROM [dbo].[Member]'
EXECUTE sp_executesql @sql,
N'@OutputName NVARCHAR(100) OUTPUT',
@MyName OUTPUT;
SELECT @MyName

变通一下,问题轻而易举解决。

(0)

相关推荐

  • sp_executesql 使用复杂的Unicode 表达式错误的解决方法

    Msg 102, Level 15, State 1, Line 3 Incorrect syntax near '+'. 当你尝试执行下面这段代码时,会得到如上这个错误提示. 复制代码 代码如下: DECLARE @MyName NVARCHAR(100) DECLARE @FieldName SYSNAME = N'Name' EXECUTE sp_executesql N'SELECT TOP 1 @OutputName = ['+ @FieldName +'] FROM [dbo].[M

  • JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法

    本文实例讲述了JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法.分享给大家供大家参考,具体如下: Uncaught SyntaxError: Unexpected token ) 以下代码引发了此异常: <div class="Hd_live_Sharediv left"> <a href="javascript:void()" onclick="loadLivePlayer('ud

  • pandas筛选某列出现编码错误的解决方法

    如下所示: df = df[df['cityname']==u'北京市'] 记得,如果用的python2,一定要导入 import sys reload(sys) sys.setdefaultencoding('utf-8') 或者在中文前面加入u'表示unicode编码的,因为pandas对象中中文字符为unicode类型的. 以上这篇pandas筛选某列出现编码错误的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • VC中LINK 2001 和 LINK 2009 的错误的解决方法

    最近将两个开源C++项目编译成windows版本的时候遇到很多问题,关键是两个项目经过同事的修改之后,一个项目引用了另一个项目,两个项目的头文件中都有一些跨平台的关于数据类型,以及一些通用函数的定义,所以导致有冲突,编译的时候总是报错,报的最多的是"无法解析的外部符号",经过近3天的折腾总算都通过了,这里是一些总结. 首先,关于VC中的lib,与linux下的静态库是不同的,在VC中编译动态库的时候会生成一个lib和一个对应的dll,使用者在使用的时候需要包含头文件以及连接到该lib,

  • Oracle数据库中ora-12899错误的解决方法

    在使用ORACLE的过程中,会出现各种各样的问题,各种各样的错误,其中ORA-12899就是前段时间我在将数据导入到我本地机器上的时候一直出现的问题.不过还好已经解决了这个问题,现在分享一下,解决方案; 出现ORA-12899,是字符集引起的,中文在UTF-8中占3个字节,ZHS16GBK中占2个字节,而源dmp文件字符集是ZHS16GBK库里倒出来的数据,现在要导入到目标字符集为UTF-8的库里,所以会出现ORA-12899 其实只要修改一下ORACLE 的字符集就可以很好的解决这个问题; 但

  • Oracle数据库TNS常见错误的解决方法汇总

    TNS是Oracle Net的一部分,是专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,就必须配置TNS.本文主要讲述了Oracle数据库TNS常见错误的解决方法如下: 1.ORA-12541:TNS:没有监听器 原因:没有启动监听器或者监听器损坏.若是前者,使用命令net start OracleOraHome10gTNSListener(名字可能有出入)即可;如果是后者,则使用"Net Configuration Assistant"

  • 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误的解决方法

    1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8 在安装的时候报错: sudo dpkg -i mysql-workbench-community-6.3.8-1ubu1604-amd64.deb 提示:未安装软件包 libpng12-0. 然而使用sudo apt-get -f install后还是报错,后来找到下载libpng12-0的地址并安装. 2.下载安装libpng12-0 下载libpng12-0地址:

  • Oracle安装监听器错误的解决方法

    小白在搭载环境时,经常遇到的一个问题就是数据库安装错误,其中Oracle监听器的错误是经常出现的一个错误,搞不好还要重装系统.下面我就总结一下解决监听器配置问题的三个方法. 一.删除监听器重新配置 在cmd命令栏,sercices.msc查看服务,找到Oracle监听器,停止运行.找到配置和移植工具下的Net Configuration Assistant进行简单的删除再重新建一个即可,直接点击下一步(ps重新配置完成后需重启电脑). 二.重新配置IP地址 如果在服务中Oracle监听器已经打开

  • Laravel中常见的错误与解决方法小结

    一.报错: 「Can't swap PDO instance while within transaction」 通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的: <?php public function setPdo($pdo) { if ($this->transactions >= 1) { throw new RuntimeException(" Can't swap PDO instance while within transact

  • JSON 对象未定义错误的解决方法

    今天在使用Moodle的时候, 突然发现在IE下进入课件的时候提示"JSON 未定义"错误信息. 后来找来一个 "json2.js" 引入测试了一下. OK 解决. 后来一向觉的不靠谱,仔细推敲了一下发现我的IE是在兼容模式下. 换到正常模式, 注销到引用"json2.js"的代码. 果然是还是正常的了. 所以, 猜想IE可能是为了兼容模式中的"兼容"功能. 所以不会去加载过多不确定的东西(最小启动单元). 包括JSON的解析

随机推荐