C#From里执行的一个比较复杂的SQL语句时报错,请各位高手指点,谢谢。(错误信息:第一行'N'处有错误),代码如下:
//string select = "master..xp_cmdshell 'bcp \"SELECT * FROM Sheet1$ where id between " + ee + " and "+ (ee+59999) +" \" queryout " + getFilePath2 + @"stocklist" + i.ToString() + ".xls -c -Ssqlserver -Uinformation -Pwilling'";MessageBox.Show(select);
(如果用这一句可以正常执行)string select = "master..xp_cmdshell 'bcp \"SELECT 供应商,型号, (CASE WHEN(SELECT COUNT(DISTINCT 品牌) FROM Sheet1$ WHERE 型号 = A.型号) > 1 THEN 'N/A' ELSE MIN(品牌) END)" + 
" AS 品牌, SUM(数量) AS 数量, MIN(封装) AS 封装, MAX(年份) AS 年份 FROM Sheet1$ A GROUP BY 型号,供应商 ORDER BY 供应商\" queryout " + getFilePath2 + @"stocklist" + i.ToString() + ".xls -c -Ssqlserver -Uinformation -Pwilling'";
(这一行报错:第一行'N'处有错误)
MessageBox.Show(select);
SqlCommand sqlCmd = new SqlCommand(select,sqlConn);
sqlCmd.ExecuteNonQuery();请各位高手指点,是不是case语句不能Sql里用?谢谢。

解决方案 »

  1.   

    @_@好乱。。你把sql语句输出一下,看看跟预期的是否一至吧
      

  2.   

    同意:确实有点乱。
    另,你用: MessageBox.Show(select),查看起来是很费力的,
    不如你加一个Edit控件,然后把文本赋值给它,用 xxEdit.text = select.
    呵呵,记不大清是不是这样写,
    你把Sql语句直接到查询分析器中执行,如果有错,它会详细的告诉你那里有错,是什么错的。。
      

  3.   

    SELECT 供应商,型号, (CASE WHEN(SELECT COUNT(DISTINCT 品牌) FROM Sheet1$ WHERE 型号 = A.型号) > 1 THEN 'N/A' ELSE MIN(品牌) END) AS 品牌, SUM(数量) AS 数量, MIN(封装) AS 封装, MAX(年份) AS 年份 FROM Sheet1$ A GROUP BY 型号,供应商 ORDER BY 供应商这一句在sql查询分析器里可以正常执行,但如果将case这一段去掉,全句就可以正常执行了。
      

  4.   

    我想可能是这句中有二对''的问题,因为在sql查询器是其中'N/A'显示为黑色,而其为红色,sql语句中有没有象C#中\这样的转意字符?
      

  5.   

    你说的没错,就是转义字符的问题将'N/A'改成''N/A''就可以了。
      

  6.   

    你的IDE是VS.NET吗?
    如果是,用Query Builder来建立SQL语句好了,这个是图形化界面的,非常好用,在单一数据库中,到目前我还没有碰到过不能用它来自动生成的SQL语句。