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

所属分类: 数据库 / MsSql 阅读数: 2156
收藏 0 赞 0 分享
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


变通一下,问题轻而易举解决。
更多精彩内容其他人还在看

SqlServer 在事务中获得自增ID的实例代码

这篇文章主要介绍了 SqlServer 在事务中获得自增ID实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

SQLServer性能优化--间接实现函数索引或者Hash索引

本文主要介绍了SQLServer性能优化--间接实现函数索引或者Hash索引的解决方式。具有很好的参考价值。下面跟着小编一起来看下吧
收藏 0 赞 0 分享

SQL Server日期加减函数DATEDIFF与DATEADD用法分析

这篇文章主要介绍了SQL Server日期加减函数DATEDIFF与DATEADD用法,结合分析SQL Server使用DATEDIFF与DATEADD函数获取常见的周、月、天等日期相关运算技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

SQLServer数据库中开启CDC导致事务日志空间被占满的原因

这篇文章主要介绍了SQLServer数据库中开启CDC导致事务日志空间被占满的原因分析和解决办法(REPLICATION),需要的朋友可以参考下
收藏 0 赞 0 分享

解决Windows 10家庭版安装SQL Server 2014出现.net 3.5失败问题

在安装SQL Server 2014的过程中,出现.net 3.5缺失,导致失败问题。怎么解决此问题呢?下面小编给大家分享解决Windows 10家庭版安装SQL Server 2014出现.net 3.5失败问题,一起看看吧
收藏 0 赞 0 分享

SQL Server 2016 无域群集配置 AlwaysON 可用性组图文教程

这篇文章主要介绍了SQL Server 2016 无域群集配置 AlwaysON 可用性组图文教程,需要的朋友可以参考下
收藏 0 赞 0 分享

SQL Server 2016 配置 SA 登录教程

这篇文章主要介绍了SQL Server 2016 配置 SA 登录教程以及sqlserver2016 sa账号登录不上的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

MSSQL 2000 使用帮助(sql server简明教程)

这篇文章主要介绍了MSSQL 2000 使用帮助(sql server简明教程),需要的朋友可以参考下
收藏 0 赞 0 分享

SQL Server实时同步更新远程数据库遇到的问题小结

这篇文章主要介绍了SQL Server实时同步更新远程数据库遇到的问题小结,需要的朋友可以参考下
收藏 0 赞 0 分享

Oracle 删除用户和表空间详细介绍

这篇文章主要介绍了Oracle 删除用户和表空间详细介绍的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多