连接sql server2005时提示:内部连接致命错误。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接sql server2005时提示:内部连接致命错误。相关的知识,希望对你有一定的参考价值。
C# winForm程序连接sql server2005,
出现以上提示,咋回事?
相关程序如下:
string SQL = "select * from Employee";
string myConStr = "Data Source=" + serverIP + "\\SQLEXPRESS;Initial Catalog=FilmManager;User ID=clwang;Persist Security Info=True";
SqlConnection myConnection = new SqlConnection(myConStr);
SqlDataAdapter myAdapter = new SqlDataAdapter(SQL,myConnection);
myAdapter.SelectCommand = new SqlCommand(SQL, myConnection);
try
myConnection.Open();
myAdapter.Fill(myDS);
catch (Exception ex)
MessageBox.Show(ex.Message);
finally
if (myConnection.State == ConnectionState.Open)
myConnection.Close();
应该不是程序的问题。
SQL SERVER2005 使用的图形界面工具是 SQL Server Management Studio,
在其它版本的SQL SERVER 2005 里,都带这个工具的,仅Express版本不带。
现在微软官方提供CTP版本供Express版使用,下面是下载链接,你可以下载后安装,安装后在SQL SERVER 2005 程序组里就会出现SQL Server Management Studio Express,使用它来进行管理即可。
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796
另外需要安装xml6的话,下载页面也 参考技术A 看看是不是环境变量的问题,检查一下数据库路径
使用内部连接时如何在 sql server 中获取计数?
【中文标题】使用内部连接时如何在 sql server 中获取计数?【英文标题】:how to get count in sql server while using inner joins? 【发布时间】:2012-11-03 22:21:30 【问题描述】:我有以下查询:
SELECT
h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
s.SitePageName,s.pagepath
FROM
tblSiteRolePermissions p
INNER JOIN
tblSitePages s ON p.fkSitePageId = s.pkSitePageId
INNER JOIN
tblHelp h ON s.pkSitePageId=h.fkSitePageId
WHERE
(p.fkRoleId = 4 AND p.ViewOnly = 1)
ORDER BY
s.pkSitePageId
我想从tblSiteRolePermissions
获得计数。我已经尝试过Count
,但它抛出了一些错误,例如:
消息 8120,第 16 层,状态 1,第 1 行 列 'tblHelp.HelpContent' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
请帮助我,让我知道我错在哪里。
更新
这是我正在尝试的代码:
SELECT
count(p.pkRolePermissionId),
h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
s.SitePageName, s.pagepath
FROM
tblSiteRolePermissions p
INNER JOIN
tblSitePages s ON p.fkSitePageId = s.pkSitePageId
INNER JOIN
tblHelp h ON s.pkSitePageId = h.fkSitePageId
WHERE
(p.fkRoleId = 4 AND p.ViewOnly = 1)
ORDER BY
s.pkSitePageId
【问题讨论】:
你要数什么? @PaulAlanTaylor 请查看我的问题,我已经更新了它.. 错误信息与您的示例 SQL 语句不匹配。您的语句中既没有count()
(或任何其他聚合函数)也没有group by
。请向我们展示产生错误的真实陈述。
@a_horse_with_no_name 请立即查看
您想获取 all 行的计数,还是仅获取单个 fkSitePageId 的计数?还是其他一些属性组合?
【参考方案1】:
如果您使用的是聚合函数,则需要对 SELECT
语句中不在聚合中的剩余字段使用 GROUP BY
子句。类似这样:
SELECT count(p.pkRolePermissionId) CountRolePermission,
h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s
ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h
on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
GROUP BY h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath
ORDER BY s.pkSitePageId
如果你想要所有行的计数,那么你可以使用这样的东西:
SELECT NumRows.TotalCount,
h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s
ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h
on s.pkSitePageId=h.fkSitePageId
cross join
(
SELECT count(*) TotalCount
from tblSiteRolePermissions p
INNER JOIN tblSitePages s
ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h
on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
) NumRows
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
ORDER BY s.pkSitePageId
或者您可以在查询中使用 CTE,类似于:
;with cte as
(
SELECT h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s
ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h
on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
)
select h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath,
(select count(*) from cte) as Total
from cte
【讨论】:
@Visions 这意味着您计算的数据由于GROUP BY
而不同。您到底想count()
做什么,这对于确定正确的语法很重要。【参考方案2】:
SELECT count(p.pkRolePermissionId),h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
s.SitePageName,s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
GROUP BY h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
s.SitePageName,s.pagepath
ORDER BY s.pkSitePageId
【讨论】:
以上是关于连接sql server2005时提示:内部连接致命错误。的主要内容,如果未能解决你的问题,请参考以下文章
连接SQL2005出现SQL Server 无法连接到服务器 提示 服务器:消息11,级别16,状态1 怎么解决啊
我用sql server 2008 management studio 连接 sql server 2005, 提示4064错误,请问如何解决?
如何用SQL SERVER 2005连接SQL SERVER 2008