SQL Server 2005使用手记
2009-02-26 14:42
253 查看
在使用COMPUTE时,遇到如下提示信息:
SQL 执行错误。
已执行 SQL 语句:SELECT 序号, 考核时间, 考核名称, 评定结果 FROM 考核成绩表 COMPUTE COUNT(考核时间) BY 评定结果
错误源:.NET SqlClient Data Provider
错误信息:在排序依据列表中没有找到COMPUTE BY子句中的某一项。计算依据列表中的所有表达式也必须同时出现在排序依据列表中。
将语句修改为:
SELECT 序号, 考核时间, 考核名称, 评定结果 FROM 考核成绩表 ORDER BY 评定结果 COMPUTE COUNT(考核时间) BY 评定结果
后可以正常执行。但又遇到一个问题,似乎得到的结果不正确。后面发现是因为我是在表的SQL窗口中执行的语句,而带有COMPUTE的语句返回的是多个结果集,需要在单独的查询窗口中执行才能得到全部的结果。新建一个查询后再执行命令得到一堆的结果集,貌似正确了。
又试图将两个字段相加的结果来做为COMPUTE BY的依据字段,因为其中一个字段有NULL值,所以得出来的结果并不正确,语句如下:
SELECT 序号, 考核时间, 考核名称, 课目, 评定结果
FROM 考核成绩表
ORDER BY CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")
COMPUTE COUNT(评定结果) BY CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")
其中将考核名称替换成ISNULL(考核名称, ""),结果出现错误:
消息 1038,级别 15,状态 4,第 4 行
缺少对象或列名,或者对象或列名为空。对于 SELECT INTO 语句,请确保每列均具有名称。对于其他语句,请查找空的别名。不允许使用定义为 "" 或 [] 的别名。请添加名称或单个空格作为别名。
若是将ISNULL(考核名称, "")换成ISNULL(考核名称, " ")则提示:
消息 207,级别 16,状态 1,第 3 行
列名 ' ' 无效。
消息 207,级别 16,状态 1,第 4 行
列名 ' ' 无效。
消息 163,级别 15,状态 1,第 4 行
计算依据列表与排序依据列表不匹配。
而将CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")写成(CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")) AS 别名后出现如下提示:
消息 156,级别 15,状态 1,第 4 行
关键字 'as' 附近有语法错误。
后面单独执行SELECT CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "") FROM 考核成绩表
仍然是消息1038,于是注意到应当用单引号而不是双引号,改过来后结果正常。
SQL 执行错误。
已执行 SQL 语句:SELECT 序号, 考核时间, 考核名称, 评定结果 FROM 考核成绩表 COMPUTE COUNT(考核时间) BY 评定结果
错误源:.NET SqlClient Data Provider
错误信息:在排序依据列表中没有找到COMPUTE BY子句中的某一项。计算依据列表中的所有表达式也必须同时出现在排序依据列表中。
将语句修改为:
SELECT 序号, 考核时间, 考核名称, 评定结果 FROM 考核成绩表 ORDER BY 评定结果 COMPUTE COUNT(考核时间) BY 评定结果
后可以正常执行。但又遇到一个问题,似乎得到的结果不正确。后面发现是因为我是在表的SQL窗口中执行的语句,而带有COMPUTE的语句返回的是多个结果集,需要在单独的查询窗口中执行才能得到全部的结果。新建一个查询后再执行命令得到一堆的结果集,貌似正确了。
又试图将两个字段相加的结果来做为COMPUTE BY的依据字段,因为其中一个字段有NULL值,所以得出来的结果并不正确,语句如下:
SELECT 序号, 考核时间, 考核名称, 课目, 评定结果
FROM 考核成绩表
ORDER BY CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")
COMPUTE COUNT(评定结果) BY CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")
其中将考核名称替换成ISNULL(考核名称, ""),结果出现错误:
消息 1038,级别 15,状态 4,第 4 行
缺少对象或列名,或者对象或列名为空。对于 SELECT INTO 语句,请确保每列均具有名称。对于其他语句,请查找空的别名。不允许使用定义为 "" 或 [] 的别名。请添加名称或单个空格作为别名。
若是将ISNULL(考核名称, "")换成ISNULL(考核名称, " ")则提示:
消息 207,级别 16,状态 1,第 3 行
列名 ' ' 无效。
消息 207,级别 16,状态 1,第 4 行
列名 ' ' 无效。
消息 163,级别 15,状态 1,第 4 行
计算依据列表与排序依据列表不匹配。
而将CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")写成(CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")) AS 别名后出现如下提示:
消息 156,级别 15,状态 1,第 4 行
关键字 'as' 附近有语法错误。
后面单独执行SELECT CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "") FROM 考核成绩表
仍然是消息1038,于是注意到应当用单引号而不是双引号,改过来后结果正常。
相关文章推荐
- 在 SQL Server 2005/2008 中,使用 Gmail 帐号配置数据库邮件功能
- SQL SERVER 2005使用sa 登录失败-提示该用户与可信 SQL Server 连接无关联
- ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005
- 使用asp.net 2.0和SQL SERVER 2005构建多层应用
- 使用asp.net 2.0和SQL SERVER 2005构建多层应用
- SQL Server 2005使用BCP命令将数据表导出到Excel第一行包括表头
- SQL Server 2005中的SQLCMD工具使用
- 使用 TRY/CATCH 语句解决 SQL Server 2005 死锁
- 删除VS2005后,无法使用SQL Server 2005的Business Intelligence Development Studio修复方法
- 使用SQL Server 2005 Report Builder
- 在Vista中使用SQL Server 2005 Management Studio 连接本地失败
- 在SQL SERVER 2005存储过程中,使用循环语句
- SQL server 2005 PIVOT运算符的使用
- 使用 TRY/CATCH 语句解决 SQL Server 2005 死锁
- 在SQL Server 2005中使用Try…Catch块进行T-SQL错误处理
- SQL Server 2005 导出包含(insert into)数据的SQL脚本 (使用存储过程)
- Sql Server 2005 Express 无法使用SA用户登陆解决
- SQL Server 2005使用作业设置定时任务
- SQL Server 2005使用作业设置定时任务(转)
- 使用 TRY/CATCH 语句解决 SQL Server 2005 死锁