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里用?谢谢。
//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里用?谢谢。
另,你用: MessageBox.Show(select),查看起来是很费力的,
不如你加一个Edit控件,然后把文本赋值给它,用 xxEdit.text = select.
呵呵,记不大清是不是这样写,
你把Sql语句直接到查询分析器中执行,如果有错,它会详细的告诉你那里有错,是什么错的。。
如果是,用Query Builder来建立SQL语句好了,这个是图形化界面的,非常好用,在单一数据库中,到目前我还没有碰到过不能用它来自动生成的SQL语句。