想让字符串中的@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

解决方案 »

  1.   

    Declare @exeString Nvarchar(2000) --定義為Nvarchar類型
    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, N'@XML_FILE XML OUTPUT',@XML_FILE OUTPUT  --第二個參數前加上N
      

  2.   

    过程需要类型为 '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額外參數值的替代符號。值可以只是常數或變數。值不可以是函數或使用運算子建立的運算式等較複雜的運算式。