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

