sp_executesql 應用龐雜的Unicode 表達式毛病的處理辦法。本站提示廣大學習愛好者:(sp_executesql 應用龐雜的Unicode 表達式毛病的處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是sp_executesql 應用龐雜的Unicode 表達式毛病的處理辦法正文
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
變通一下,成績易如反掌處理。