日期:2014-05-19  浏览次数:20401 次

一个关于exec的问题
想让字符串中的@XML_FILE作为exec的返回值,但执行时遇到了
过程需要类型为   'ntext/nchar/nvarchar '   的参数   '@statement '。问题,到底是什么问题呢???请各位高人指点迷津....

SET   @exeString   =   'SELECT   @XML_FILE   =   ( '   +
      'SELECT   CONVERT(xml,T.c)   '   +
      'FROM   OPENROWSET   (BULK   '   +   char(39)   +   @XML_FILE_NAME   +   char(39)   +   ',SINGLE_BLOB)   T(c)) '

        print   @exeString
        exec     sp_executesql   @exeString, '@XML_FILE   XML   OUTPUT ',@XML_FILE   OUTPUT


------解决方案--------------------
过程需要类型为 'ntext/nchar/nvarchar ' 的参数 '@statement '。

----------
這個提示已經很明顯了。


語法
sp_executesql [@stmt =] stmt
[
{, [@params =] N '@parameter_name data_type [,...n] ' }
{, [@param1 =] 'value1 ' [,...n] }
]

引數
[@stmt =] stmt

包含 Transact-SQL 陳述式或批次的 Unicode 字串。stmt m 必須是 Unicode 常數或可以以隱含方式轉換為 ntext 的變數。更複雜的 Unicode 運算式是不允許的 (例如以 + 運算子串連二個字串),也不允許字元常數。如果指定常數,其前置字元必須是 N,例如,Unicode 常數 N’sp_who’ 是合法的,但字元常數 ‘sp_who’ 是不合法的。字串的大小僅受限於可用資料庫伺服器記憶體。

stmt 可以包含與變數名稱相同形式的參數,例如:

N 'SELECT * FROM Employees WHERE EmployeeID = @IDParameter '

stmt 中包括的每個參數必須在 @params 參數定義清單與參數值清單中都有對應的項目。

[@params =] N '@parameter_name data_type [,...n] '

包含嵌入 stmt 的所有參數之定義的字串。字串必須是 Unicode 常數或可以以隱含方式轉換為 ntext 的變數。每個參數定義包含一個參數名稱與資料型別。n 是指出額外參數定義的替代符號 (Placeholder)。stmt 中指定的每個參數都必須在 @params中定義。如果 stmt 中的 Transact-SQL 陳述式或批次不包含參數,就不需要 @params。參數的預設值為 NULL。

[@param1 =] 'value1 '

參數字串中定義的第一個參數值。這個值可以是常數或變數。stmt 中包括的每個參數都必須有參數值。如果 stmt 中的 Transact-SQL 陳述式或批次沒有參數,就不需要參數值。

n

額外參數值的替代符號。值可以只是常數或變數。值不可以是函數或使用運算子建立的運算式等較複雜的運算式。