栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 系统运维 > 数据库 > MySQL > MsSql

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

MsSql 更新时间:发布时间: 百科书网 趣学号
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


变通一下,问题轻而易举解决。
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/170209.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号