sp_executesql 使用復(fù)雜的Unicode 表達(dá)式錯(cuò)誤的解決方法
更新時(shí)間:2012年01月20日 19:51:44 作者:
sp_executesql 使用復(fù)雜的Unicode 表達(dá)式錯(cuò)誤的解決方法,需要的朋友可以參考下
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '+'.
當(dāng)你嘗試執(zhí)行下面這段代碼時(shí),會(huì)得到如上這個(gè)錯(cuò)誤提示。
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
問(wèn)題出于不允許使用更復(fù)雜的 Unicode 表達(dá)式(例如使用 + 運(yùn)算符連接兩個(gè)字符串)??梢詤⒖迹?A target=_blank>http://technet.microsoft.com/zh-cn/library/ms188001.aspx
[ @statement = ] statement
包含 Transact-SQL 語(yǔ)句或批處理的 Unicode 字符串。statement 必須是 Unicode 常量或 Unicode 變量。不允許使用更復(fù)雜的 Unicode 表達(dá)式(例如使用 + 運(yùn)算符連接兩個(gè)字符串)。不允許使用字符常量。如果指定了 Unicode 常量,則必須使用 N 作為前綴。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 則無(wú)效。字符串的大小僅受可用數(shù)據(jù)庫(kù)服務(wù)器內(nèi)存限制。在 64 位服務(wù)器中,字符串大小限制為 2 GB,即 nvarchar(max) 的最大大小。
解決問(wèn)題,可以宣告一個(gè)變量如下代碼DECLARE @sql NVARCHAR(MAX),把帶動(dòng)態(tài)的數(shù)據(jù)名,表名或是字段的SQL語(yǔ)句賦值于這個(gè)變量, 然后用這個(gè)變量傳入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
變通一下,問(wèn)題輕而易舉解決。
Incorrect syntax near '+'.
當(dāng)你嘗試執(zhí)行下面這段代碼時(shí),會(huì)得到如上這個(gè)錯(cuò)誤提示。
復(fù)制代碼 代碼如下:
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
問(wèn)題出于不允許使用更復(fù)雜的 Unicode 表達(dá)式(例如使用 + 運(yùn)算符連接兩個(gè)字符串)??梢詤⒖迹?A target=_blank>http://technet.microsoft.com/zh-cn/library/ms188001.aspx
[ @statement = ] statement
包含 Transact-SQL 語(yǔ)句或批處理的 Unicode 字符串。statement 必須是 Unicode 常量或 Unicode 變量。不允許使用更復(fù)雜的 Unicode 表達(dá)式(例如使用 + 運(yùn)算符連接兩個(gè)字符串)。不允許使用字符常量。如果指定了 Unicode 常量,則必須使用 N 作為前綴。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 則無(wú)效。字符串的大小僅受可用數(shù)據(jù)庫(kù)服務(wù)器內(nèi)存限制。在 64 位服務(wù)器中,字符串大小限制為 2 GB,即 nvarchar(max) 的最大大小。
解決問(wèn)題,可以宣告一個(gè)變量如下代碼DECLARE @sql NVARCHAR(MAX),把帶動(dòng)態(tài)的數(shù)據(jù)名,表名或是字段的SQL語(yǔ)句賦值于這個(gè)變量, 然后用這個(gè)變量傳入sp_executesql中。
復(fù)制代碼 代碼如下:
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
變通一下,問(wèn)題輕而易舉解決。
相關(guān)文章
基于B-樹(shù)和B+樹(shù)的使用:數(shù)據(jù)搜索和數(shù)據(jù)庫(kù)索引的詳細(xì)介紹
本篇文章介紹了,基于B-樹(shù)和B+樹(shù)的使用:數(shù)據(jù)搜索和數(shù)據(jù)庫(kù)索引的詳細(xì)分析。需要的朋友參考下2013-04-04
SQL Server 使用觸發(fā)器(trigger)發(fā)送電子郵件步驟詳解
本文分步驟給大家詳細(xì)介紹了SQL Server 使用觸發(fā)器(trigger)發(fā)送電子郵件的方法,需要的朋友可以參考下2017-04-04
SQL語(yǔ)句中含有乘號(hào)報(bào)錯(cuò)的處理辦法
這篇文章主要介紹了SQL語(yǔ)句中含有乘號(hào)報(bào)錯(cuò)的處理辦法,需要的朋友可以參考下2014-08-08
sql語(yǔ)句like多個(gè)條件的寫(xiě)法實(shí)例
這篇文章介紹了sql語(yǔ)句like多個(gè)條件的寫(xiě)法實(shí)例,有需要的朋友可以參考一下2013-10-10
SQL Server跨服務(wù)器操作數(shù)據(jù)庫(kù)的圖文方法(LinkedServer)
這篇文章主要介紹了SQL Server跨服務(wù)器操作數(shù)據(jù)庫(kù)的方法,通過(guò)鏈接服務(wù)器(LinkedServer)實(shí)現(xiàn)SQL Server遠(yuǎn)程鏈接MySql等數(shù)據(jù)庫(kù),需要的朋友可以參考下2022-10-10
SQL?Server導(dǎo)入.mdf方法的錯(cuò)誤處理方法
導(dǎo)入mdf文件和ldf文件到數(shù)據(jù)庫(kù)是網(wǎng)站搬家或者是初學(xué)者學(xué)習(xí)源碼是必要的一步,下面這篇文章主要給大家介紹了關(guān)于SQL?Server導(dǎo)入.mdf方法的錯(cuò)誤處理方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
sql server 中合并某個(gè)字段值的實(shí)例
sql server 中合并某個(gè)字段值的實(shí)例,需要的朋友可以參考一下2013-03-03
mssql insert into 和insert into select性能比較
今天沒(méi)事,測(cè)了一下insert into和insert into select的性能,沒(méi)想到這兩個(gè)性能差別這么大。2010-03-03

