none
这两个语句,为什么第一个正常,第二个就在FROM处报错。 RRS feed

  • 问题

  • Dim sql1 As String = "Declare @sql varchar(8000) Set @sql='select 省份 as '+'省份'  Select @sql=@sql+' , max(case 月份 when '''+ 月份 +''' then 重量 else 0 end) ['+ 月份 +']' from (select distinct 月份 from  Quantity) as a Set @sql=@sql+' from Quantity group by 省份' exec(@sql) "

     

    Dim sql1 As String = "Declare @sql varchar(8000) Set @sql='select 省份 as '+'省份'  Select @sql=@sql+' , max(case 收货单位 when '''+ 收货单位 +''' then 重量 else 0 end) ['+ 收货单位 +']' from (select distinct 收货单位 from  Quantity) as a Set @sql=@sql+' from Quantity group by 省份' exec(@sql) "

    只是将‘月份’字段改为了‘收货单位’字段。

    2013年11月18日 2:07

答案

  • 多半是拼成的 sql 长度超过变量定义了, 如果是2005 及以上的版本, 你可以把定义改成 varchar(max) 或者 nvarchar(max) 试试

    • 已标记为答案 Ikkyuu 2013年11月18日 3:31
    2013年11月18日 3:21

全部回复

  • 报什么错误?你可以先将@sql的代买print出来看看能不能执行,那里错了,这样就可以找到原因。

    比如print @sql


    Please Mark As Answer if it is helpful.

    2013年11月18日 2:15
  • 您好,

    應該是因為unicode的原因,而您宣告的變量是varchar(8000),不support uincode!

    可以改用NVarchar(MAX), 有unicode的字串,請加上N,如下,

    DECLARE @sql NVARCHAR(MAX)
    SET @sql = 'select 省份 as ' + '省份'
    SELECT  @sql = @sql + N' , max(case 收货单位 when ''' + 收货单位
            + ''' then 重量 else 0 end) [' + 收货单位 + ']'
    FROM    ( SELECT DISTINCT
                        收货单位
              FROM      Quantity
            ) AS a
    SET @sql = @sql + ' from Quantity group by 省份'
    PRINT @sql
    EXEC(@sql) 
    註:欄位名稱建議使用 英文


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2013年11月18日 2:32
  • error:

    incorrect syntax near the keyword 'from'

    2013年11月18日 2:58
  • 請您切換到訊息的tab,看一下print出來的訊息!

    或是只執行到print,然後看一下它的訊息! thanks.


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年11月18日 3:19
  • 多半是拼成的 sql 长度超过变量定义了, 如果是2005 及以上的版本, 你可以把定义改成 varchar(max) 或者 nvarchar(max) 试试

    • 已标记为答案 Ikkyuu 2013年11月18日 3:31
    2013年11月18日 3:21
  • 多半是拼成的 sql 长度超过变量定义了, 如果是2005 及以上的版本, 你可以把定义改成 varchar(max) 或者 nvarchar(max) 试试

    确实是你所说的问题。

    另外,我不知道,为什么不支持nvarchar(max),

    不过varchar(max)可以,

    2013年11月18日 3:32
  • 多半是拼成的 sql 长度超过变量定义了, 如果是2005 及以上的版本, 你可以把定义改成 varchar(max) 或者 nvarchar(max) 试试

    确实是你所说的问题。

    另外,我不知道,为什么不支持nvarchar(max),

    不过varchar(max)可以,

    nvarchar(max),请问LZ的sqlserver版本是2000的吗?
    2013年11月18日 5:00