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
問題出于不允許使用更復(fù)雜的 Unicode 表達(dá)式(例如使用 + 運(yùn)算符連接兩個(gè)字符串)??梢詤⒖迹?A target=_blank>http://technet.microsoft.com/zh-cn/library/ms188001.aspx
[ @statement = ] statement
包含 Transact-SQL 語句或批處理的 Unicode 字符串。statement 必須是 Unicode 常量或 Unicode 變量。不允許使用更復(fù)雜的 Unicode 表達(dá)式(例如使用 + 運(yùn)算符連接兩個(gè)字符串)。不允許使用字符常量。如果指定了 Unicode 常量,則必須使用 N 作為前綴。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 則無效。字符串的大小僅受可用數(shù)據(jù)庫服務(wù)器內(nèi)存限制。在 64 位服務(wù)器中,字符串大小限制為 2 GB,即 nvarchar(max) 的最大大小。
解決問題,可以宣告一個(gè)變量如下代碼DECLARE @sql NVARCHAR(MAX),把帶動(dòng)態(tài)的數(shù)據(jù)名,表名或是字段的SQL語句賦值于這個(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
變通一下,問題輕而易舉解決。
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
問題出于不允許使用更復(fù)雜的 Unicode 表達(dá)式(例如使用 + 運(yùn)算符連接兩個(gè)字符串)??梢詤⒖迹?A target=_blank>http://technet.microsoft.com/zh-cn/library/ms188001.aspx
[ @statement = ] statement
包含 Transact-SQL 語句或批處理的 Unicode 字符串。statement 必須是 Unicode 常量或 Unicode 變量。不允許使用更復(fù)雜的 Unicode 表達(dá)式(例如使用 + 運(yùn)算符連接兩個(gè)字符串)。不允許使用字符常量。如果指定了 Unicode 常量,則必須使用 N 作為前綴。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 則無效。字符串的大小僅受可用數(shù)據(jù)庫服務(wù)器內(nèi)存限制。在 64 位服務(wù)器中,字符串大小限制為 2 GB,即 nvarchar(max) 的最大大小。
解決問題,可以宣告一個(gè)變量如下代碼DECLARE @sql NVARCHAR(MAX),把帶動(dòng)態(tài)的數(shù)據(jù)名,表名或是字段的SQL語句賦值于這個(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
變通一下,問題輕而易舉解決。
相關(guān)文章
SQLSERVER 語句交錯(cuò)引發(fā)的死鎖問題案例詳解
這篇文章主要介紹了SQLSERVER 語句交錯(cuò)引發(fā)的死鎖研究,要解決死鎖問題,個(gè)人感覺需要非常熟知各種隔離級別,尤其是 可提交讀 模式下的 CURD 加解鎖過程,這一篇我們就來好好聊一聊2023-02-02sqlserver 不能將值NULL插入列id(列不允許有空值解決)
Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '80040e2f' 不能將值 NULL 插入列 'id',表 'web.dbo.dingdan';列不允許有空值。INSERT 失敗2013-06-06SQL 使用 VALUES 生成帶數(shù)據(jù)的臨時(shí)表實(shí)例代碼詳解
這篇文章主要介紹了SQL 使用 VALUES 生成帶數(shù)據(jù)的臨時(shí)表,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2007-09-09SQL學(xué)習(xí)筆記七函數(shù) 數(shù)字,日期,類型轉(zhuǎn)換,空值處理,case
SQL學(xué)習(xí)筆記七函數(shù) 數(shù)字,日期,類型轉(zhuǎn)換,空值處理,case 使用說明2011-08-08sql server服務(wù)無法啟動(dòng)的解決方案
sql server軟件是一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有使用方便可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點(diǎn),我們在數(shù)據(jù)編程操作時(shí)經(jīng)常會(huì)使用這款編程軟件,在編程時(shí)系統(tǒng)有時(shí)會(huì)提示sql server服務(wù)無法啟動(dòng),那么大家該如何正常啟動(dòng)呢,下面就由小編來給大家介紹一下如何解決2023-11-11數(shù)據(jù)庫中兩張表之間的數(shù)據(jù)同步增加、刪除與更新實(shí)現(xiàn)思路
可以采用分別創(chuàng)建增加、刪除、更新的觸發(fā)器(Trigger)來達(dá)到兩張表之間數(shù)據(jù)同步的目的,感興趣的朋友可以參考下,希望可以幫助到你2013-03-03