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

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

View Code

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中。

View Code

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

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

sp_executesql 使用复杂的 Unicode 表达式相关推荐

  1. SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 原文:SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语 ...

  2. sp_executesql (Transact-SQL) from MSDN

    执行可以多次重复使用或动态生成的 Transact-SQL 语句或批处理.Transact-SQL 语句或批处理可以包含嵌入参数. 语法 sp_executesql [ @stmt = ] stmt[ ...

  3. SQL Server 中 EXEC全称execute 与 SP_EXECUTESQL动态执行sql代码语句 的区别

    先睹为快 use cplvfx_DBdeclare @sqlStr nvarchar(max)set @sqlStr='select top 100 * from User'exec (@sqlStr ...

  4. SqlServer使用sp_executesql执行动态语句

    一.sp_executesql 语法 功能描述:执行可多次重用的Transact-SQL语句或批处理,或动态生成的语句或批处理.Transact-SQL语句或批处理可以包含嵌入参数. 语法: -- S ...

  5. MS SQL 排序规则总结

    排序规则术语 什么是排序规则呢? 排序规则是根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则.SQL Server 支持在单个数据库中存储具有不同排序规则的对象.MSDN解释:在 Mic ...

  6. 镇魂歌~Qt5算法及正则表达式

    QtAlgorithms.QtGlobal模块的常用算法+正则表达式 double a = -19.3,b = 9.7; double c = qAbs(a); double max = qMax(b ...

  7. 自学-ES6篇-正则的扩展

    1.RegExp构造函数 在ES5中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = new RegEx ...

  8. MSSQL排序规则总结

    什么是排序规则呢? 排序规则根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则.SQL Server 支持在单个数据库中存储具有不同排序规则的对象.MSDN解释:在 Microsoft S ...

  9. 《ECMAScript 6 入门》笔记

    let 和 const 命令 https://github.com/ruanyf/es6tutorial/blob/gh-pages/docs/let.md 如果使用let,声明的变量仅在块级作用域内 ...

最新文章

  1. 如何高效读论文?剑桥CS教授亲授“三遍论”:论文最多读三遍,有的放矢,步步深入...
  2. UIBezierPath画圆弧的记录
  3. Linux下安装rpm出现error: Failed dependencies
  4. 48道C语言上机题参考答案,二级C语言上机题库参考答案(已修改).doc
  5. Ubuntu桌面版网络设置
  6. Linux 下多核CPU知识
  7. python之求字典最值
  8. 策略设计模式_设计模式之 策略模式
  9. LightOJ1234 Harmonic Number
  10. python基础知识-Python学习--最完整的基础知识大全
  11. 蓝桥杯笔记:(给的元素不重复)求全排列(排列不可重复,排列可重复)
  12. 百度NLP架构与应用
  13. c语言 组合问题,排列组合问题 C语言
  14. laravel框架中Cache缓存类中的原子锁
  15. Thinkphp5使用ZipArchive批量打包下载图片
  16. android 各种分辨率的logo大小
  17. 小米iot业务_一文看懂小米2019上半年财报:IoT平台连接设备达1.96亿台
  18. 破解入门(二)-----认识OllyDBG
  19. 陈老师深度为你解析,单片机的运行原理
  20. 使用zrender绘制基本图形

热门文章

  1. dword类型和十进制有什么区别_微信小商店有几种类型,有什么区别?
  2. linux Fedora安装桌面,CentOS6.x\Red Hat\Fedora\Linux 安装Wine 1.7.48 桌面运行环境教程
  3. linux grep 快速,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  4. 运动桁架下压力信号采集与处理
  5. 如何快速将微信公众号留言嵌入到CSDN博文中?
  6. 第十六届智能车竞赛比赛进行中 - 参赛队员提出的问题
  7. win10 系统安装 服务器失败怎么回事,Win10正式版安装出现问题怎么办
  8. php微信扫码支付报错,(转)微信调用扫码和支付功能是都报错 the permission value is offline verifying...
  9. 铁路运货的运费与路程远近java_JAVA铁路运货的运费与路程远近及货物的重 – 手机爱问...
  10. python3 UDP TCP 调试回射命令行