关于sql-server–SQLServer2000:用于执行连接聚合子查询的想法和sql语句聚合查询的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.NET中SQLServer2000、
关于sql-server – SQL Server 2000:用于执行连接聚合子查询的想法和sql语句聚合查询的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.NET 中SQL Server 2000、SQL Server 2005 连接字符串、sql server 2000下载 php Sql Server连接失败问题及解决办法、SQL Server 2008 Internal #001 SQL Server 的版本Microsoft SQL、SQL Server 应用开发 --- SQL SERVER 2000 数据查询综合实例等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- sql-server – SQL Server 2000:用于执行连接聚合子查询的想法(sql语句聚合查询)
- .NET 中SQL Server 2000、SQL Server 2005 连接字符串
- sql server 2000下载 php Sql Server连接失败问题及解决办法
- SQL Server 2008 Internal #001 SQL Server 的版本Microsoft SQL
- SQL Server 应用开发 --- SQL SERVER 2000 数据查询综合实例
sql-server – SQL Server 2000:用于执行连接聚合子查询的想法(sql语句聚合查询)
QuestionID QuestionTitle UpVotes DownVotes ========== ============= ======= ========= 2142075 Win32: Cre... 0 0 2232727 Win32: How... 2 0 1870139 Wondows Ae... 12 0
现在我希望返回一个列,其中包含逗号分隔的“作者”列表(例如原始海报和编辑).例如.:
QuestionID QuestionTitle UpVotes DownVotes Authors ========== ============= ======= ========= ========== 2142075 Win32: Cre... 0 0 Ian Boyd 2232727 Win32: How... 2 0 Ian Boyd,roygbiv 1870139 Wondows Ae... 12 0 Ian Boyd,Aaron Klotz,Jason Diller,danbystrom
作假
sql Server 2000没有CONCAT(AuthorName,’,’)聚合操作,我一直伪造它 – 为TOP 1作者和作者计数执行简单的子选择.
QuestionID QuestionTitle UpVotes DownVotes FirstAuthor AuthorCount ========== ============= ======= ========= =========== =========== 2142075 Win32: Cre... 0 0 Ian Boyd 1 2232727 Win32: How... 2 0 Ian Boyd 2 1870139 Wondows Ae... 12 0 Ian Boyd 3
如果有多个作者,那么我向用户显示一个省略号(“…”),表示有多个.例如用户会看到:
QuestionID QuestionTitle UpVotes DownVotes Authors ========== ============= ======= ========= ========== 2142075 Win32: Cre... 0 0 Ian Boyd 2232727 Win32: How... 2 0 Ian Boyd,… 1870139 Wondows Ae... 12 0 Ian Boyd,…
这很有效,因为通常一个问题不会被编辑 – 这意味着我完全支持99%的情况,1%的情况也只有一半.
线程重新查询
作为一个更复杂,容易出错的解决方案,我正在考虑迭代显示的列表,并为列表中的每个“问题”启动线程池工作线程,对数据库执行查询以获取作者列表,然后在内存中聚合列表.这意味着列表首先填充(本机)应用程序.然后我发出几千个单独的查询.
但那将是可怕的,可怕的,非常的,缓慢的.更不用说bug-riddled,因为它将是线程工作.
耶耶耶
Adam Mechanic says quite plainly:
Don’t concatenate rows into delimited
strings in sql Server. Do it client
side.
告诉我怎么做,我会做的.
/哭
任何人都可以想到一个更好的解决方案,就像我原来的“TOP 1 plus ellipses”解决方案一样快(比如说…在一个数量级内)?
例如,有没有办法返回结果集,其中到达行有关联的结果集?因此,对于每个“主”行,我可以获得包含列表的“详细信息”结果集.
代码为最佳答案
Cade’s链接到Adam Machanic’s solution我最喜欢.用户定义的函数,似乎通过魔术操作:
CREATE FUNCTION dbo.ConcatAuthors(@QuestionID int) RETURNS VARCHAR(8000) AS BEGIN DECLARE @Output VARCHAR(8000) SET @Output = '' SELECT @Output = CASE @Output WHEN '' THEN AuthorName ELSE @Output + ',' + AuthorName END FROM ( SELECT QuestionID,AuthorName,QuestionDate AS AuthorDate FROM Questions UNION SELECT QuestionID,EditorName,EditDate FROM QuestionEdits ) dt WHERE dt.QuestionID = @QuestionID ORDER BY AuthorDate RETURN @Output END
使用T-sql:
SELECT QuestionID,QuestionTitle,UpVotes,DownVotes,dbo.ConcatAuthors(AuthorID) FROM Questions
解决方法
http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/rowset-string-concatenation-which-method-is-best.aspx
http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/(请参阅响应中的Phil Factor的交叉连接解决方案 – 这将在sql Server 2000中有效)
显然在sql Server 2005中,FOR XML技巧最简单,最灵活,通常效率最高.
至于为每一行返回行集,如果由于某种原因仍然想要这样做,可以在存储过程中执行此操作,但客户端需要使用第一行集中的所有行,然后转到下一行rowset并将其与第一个行集中的第一行相关联等.您的SP需要在它作为第一个行集返回的同一个集合上打开一个游标,并按顺序运行多个选择以生成所有子行集.这是我已经完成的一项技术,但仅限于实际需要所有数据的地方(例如,在完全填充的树视图中).
无论人们怎么说,做客户端通常都是浪费带宽,因为返回所有行并在客户端进行循环和中断意味着在开始时传输了大量相同的列.每行只是为了获得行尾的更改列.
无论您在何处进行,都应根据您的使用案例做出明智的决定.
.NET 中SQL Server 2000、SQL Server 2005 连接字符串
摘要: SQL Server 2005和SQL Server 2000在数据库访问上面是通用的,关键在一个 连接 串的配置,其实这两个数据的 连接 串是可以通用的,关键是数据库服务器地址的问题。SQL Server 2005和2000数据库默认访问端口不一样。2005是2317,2000的是1433。 微软的
摘要:SQL Server 2005和SQL Server 2000在数据库访问上面是通用的,关键在一个连接串的配置,其实这两个数据的连接串是可以通用的,关键是数据库服务器地址的问题。SQL Server 2005和2000数据库默认访问端口不一样。2005是2317,2000的是1433。
微软的SQL Server 2005和SQL Server 2000在数据库访问上面是通用的,关键在一个连接串的配置,其实这两个数据的连接串是可以通用的,关键是数据库服务器地址的问题。SQL Server 2005和2000数据库默认访问端口不一样。2005是2317,2000的是1433。下面四个连接串都可以访问2000。
Server=myServerAddress;Database=DatabaseName;Uid=UserName;Pwd=Password;
Data Source=myServerAddress;Initial Catalog=DatabaseName;User ID=UserName;pwd=Password;
Server=myServerAddress,1433;Database=DatabaseName;Uid=UserName;Pwd=Password;
Data Source=myServerAddress,1433;Initial Catalog=DatabaseName;User ID=UserName;pwd=Password;
myServerAddress是数据库服务器地址,当您只写地址不写端口的情况下他们默认访问的是1433端口,也就是sqlserver 2000的数据库服务器。如果你想访问sqlserver 2005你就必须加上访问端口(,2317)或者在后面添加(\SQLExpress),如下面
Server=myServerAddress,2317;Database=DatabaseName;Uid=UserName;Pwd=Password;
Data Source=myServerAddress,2317;Initial Catalog=DatabaseName;User ID=UserName;pwd=Password;
Server=myServerAddress\SQLExpress;Database=DatabaseName;Uid=UserName;Pwd=Password;
Data Source=myServerAddress\SQLExpress;Initial Catalog=DatabaseName;User ID=UserName;pwd=Password;
通过对比你就会发现,这里面的关键部分就是端口, 只要端口对了就任何问题,至于他们的访问形式和方法是完全一样,因为他们虽然不是双胞胎但也是亲兄弟,沟通方式一样,唯一的就是名字不一样。
sql server 2000下载 php Sql Server连接失败问题及解决办法
1、确认数据库服务开启状态
2、php.ini配置中的扩展打开
3、检查数据库相关的版本
(1)Sql2000此时要检查php目录和apache的bin目录下的ntwdblib.dll文件的版本是否符合,右键点击ntwdblib.dll看文件属性就可以看见版本。Sql2000对应的ntwdblib.dll应该是7.0的版本
(2)Sql2005的时候ntwdblib.dll对应的是8.0的版本。
如果版本不对可能出现链接失败,仔细检查即可。
本人在链接sql2005的时候遇到的问题,经过仔细排查和搜索找到解决办法,希望对大家有用。
附件:两个版本的ntwdblib.dll文件,下载后将名字中的数字去掉,变成ntwdblib.dll放到相应的目录即可。
文件打包
以上就介绍了sql server 2000下载 php Sql Server连接失败问题及解决办法,包括了sql server 2000下载方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
SQL Server 2008 Internal #001 SQL Server 的版本Microsoft SQL
SQL Server Editions SQL Server 有很多的 版本 , 不同的 版本 其包含的特性或者功能也有所不同. -- 查询当前 SQL SERVER 的 版本 SELECT SERVERPROPERTY( '' Edition '' ) -- 我的查询结果是 Enterprise Evaluation Editions(64-it) -- 也可以通过 EngineEdit
sql server editions
SQL Server 有很多的版本, 不同的版本其包含的特性或者功能也有所不同.
-- 查询当前 SQL SERVER 的版本
<span>SELECT</span> SERVERPROPERTY(<span>''</span><span>Edition</span><span>''</span>)
-- 我的查询结果是 Enterprise Evaluation Editions(64-it)
-- 也可以通过 EngineEdition 来查询
<span>SELECT</span> SERVERPROPERTY(<span>''</span><span>EngineEdition</span><span>''</span>)
-- 我的查询结果是 3
但是 EngineEdition 返回的是 2,3或者4.
- 如果返回的是3,表示的是安装的SQL Server 版本要么就是Enterprise 要么就是 Enterprise Evaluation 要么就是Developer 版本,因为这三个版本其实具备完全相同的特性和功能.
- 如果返回的是2, 则表示当前的版本是 Standard 或者 Workgroup 版本,那么这两个版本在功能上会较之前3种版本要少一些.
- 而4就表示目前的版本是Express版本,包含了Express, Express with Advanced Services 或者 Windows Embeded SQL.
- 不可能返回的是1,因为自SQL Server 2005以后就不会有1返回了.
Enterprise 版本对比Standard或者 Workgroup 版本来说, Enterprise 版本的扩展性更好一些,在效率上也更高一些.
SQL Server 2012 上有可能返回到5 – 特指 SQL Azure.
-- 也可以通过查询 EditionID 来获取版本
<span>SELECT</span> SERVERPROPERTY(<span>''</span><span>EditionID</span><span>''</span>)
- 1804890536 = Enterprise
- 1872460670 = Enterprise Edition (基于内核授予许可)
- 610778273= Enterprise Evaluation
- 284895786 = Business Intelligence
- -2117995310 = Developer
- -1592396055 = Express
- -133711905= Express with Advanced Services
- -1534726760 = Standard
- 1293598313 = Web
其它参考
SQL Server 2008 R2 各个版本支持的功能 http://technet.microsoft.com/zh-cn/library/cc645993(v=sql.105).aspx
SQL Server 2012 各个版本支持的功能 http://technet.microsoft.com/zh-cn/library/cc645993.aspx
有关SERVERPEOPERTY 表达式的更多内容可以访问 http://msdn.microsoft.com/zh-cn/library/ms174396.aspx (SQL Server 2012 版本)
查看更多 SQL Server Internal 笔记 - Microsoft SQL Server 2008 Internals 读书笔记
SQL Server 应用开发 --- SQL SERVER 2000 数据查询综合实例
SQL SERVER 2000 数据 查询 综合 实例 实例 1:更新用户卡信息 1、描述: 某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:卡里的"O"和"0","i"和"1",用户反映说看不清楚,公司决定,把存储在 数据 库中的密码中所有的"O"都改成"0",把所有
SQL SERVER 2000 数据查询综合实例
实例1:更新用户卡信息
1、描述:
某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:卡里的"O"和"0","i"和"1",用户反映说看不清楚,公司决定,把存储在数据库中的密码中所有的"O"都改成"0",把所有的"i"都改成"1"。
2、实现:
declare @Card table ([password] varchar(8)) -- 创建数据表
insert into @Card
select ''abcdefgh'' union
select ''ijklmnop'' union
select ''qrstuvwx''
select * from @Card
update @Card set [password] = replace(replace([password],''o'',''0''),''i'',''1'')
select * from @Card
go
实例2:特殊排序
1、描述:
在数据库表中有以下字符数据,如: 13-1、13-2、13-3、13-4、13-100、13-108、13-18、13-11、13-15、14-1、14-2, 现在希望通过SQL语句进行排序,并道德要按前半部份数字进行排序,然后再按后半部分的数字进行排序,输出要排成这样: 13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2
2、实现:
declare @SellRecord table (listNumber varchar(10)) -- 创建数据表
insert into @SellRecord
select ''13-1'' union
select ''13-2'' union
select ''13-3'' union
select ''13-4'' union
select ''13-100'' union
select ''13-108'' union
select ''13-18'' union
select ''13-11'' union
select ''13-15'' union
select ''14-1'' union
select ''14-2''
select * from @SellRecord
select * from @SellRecord order by convert(int,left(listNumber,charindex(''-'',listNumber)-1)),convert(int,stuff(listNumber,1,charindex(''-'',listNumber),'' ''))
实例3:查询一张表中的奇数行和偶数行
1、描述:
某单位中要根据奇数行和偶数行的数据来汇总,并在这个汇总的基础上再得到一个数值
2、实现:
-- 创建数据表
use pubs
go
if exists (select * from sysobjects where name = ''tbl'') drop table tbl
go
create table tbl
(
idKey int identity(1,1) not null,
a int
)
go
insert into tbl (a) values (1)
insert into tbl (a) values (2)
insert into tbl (a) values (3)
insert into tbl (a) values (4)
insert into tbl (a) values (5)
delete from tbl where idKey = 2
go
select * from tbl
go
-- 进行查询
select identity(int,1,1) as [id], a
into tempTbl
from tbl
go
select * from tempTbl
select sum(a) from tempTbl where [id]%2 != 0
select sum(a) from tempTbl where [id]%2 = 0
go
实例4:银行卡恢复
1、描述: 一家银行发行了新的信用卡,刚开始的时候推广很好。但是逐渐地废卡越来越多,卡上的余额少于2元,并且用户长时间不使用该卡,因此银行在二月份把这些少于2元的卡的用户信息备份后就都从数据库表中删除了,但是很快问题就来了,用户发现他的卡再也不能使用而投拆,因此只能再把这些卡恢复。
2、实现:
use pubs
go
if exists (select * from sysobjects where name = ''S'') drop table S
go
if exists (select * from sysobjects where name = ''M'') drop table M
go
create table M
(
CardID int primary key not null,
UserName varchar(20) not null
)
go
create table S
(
CountID int identity(1,1) primary key, -- 帐户ID
CardID int foreign key references M (CardID), -- 卡号
Score float -- 余额
)
go
insert into M (CardID,UserName) values (16,''张三'')
insert into M (CardID,UserName) values (23,''李四'')
insert into M (CardID,UserName) values (25,''王五'')
insert into M (CardID,UserName) values (29,''刘六'')
insert into M (CardID,UserName) values (30,''杨七'')
insert into S (CardID,Score) values (16,34.5)
insert into S (CardID,Score) values (25,300)
insert into S (CardID,Score) values (29,1.5)
go
select * from M
select * from S
go
-- 恢复
insert into S (CardID,Score) select M.CardID,2 from M left join S on M.CardID = S.CardID where S.CardID is null
go
select * from S
go
实例5:
1、描述:
有如下二个表,将其中的数据进行合并,并按照学号进行分组,求出总分与平均分
2、实现:
-- 创建数据表
use pubs
go
if exists (select * from sysobjects where name = ''A'') drop table A
go
if exists (select * from sysobjects where name = ''B'') drop table B
go
create table A -- 数学成绩表
(
[id] int primary key,
score int
)
go
create table B -- 语言成绩表
(
[id] int primary key,
score int
)
go
insert into A values (16,66)
insert into A values (23,56)
insert into A values (25,67)
insert into A values (29,45)
insert into B values (23,80)
insert into B values (25,90)
insert into B values (29,59)
insert into B values (30,84)
go
select * from A
select * from B
go
-- 建立一个临时表并数据进行合并,并进行相关操作
if exists (select * from sysobjects where name = ''C'') drop table C
go
create table C -- 数学成绩表
(
[id] int,
score int
)
go
insert into C (id,score)
select A.id, A.score from A union
select B.id, B.score from B
go
select id as 学号, sum(score) as 总分, avg(score) as 平均分 from C group by id
go
实例6:
1、描述:
有表ABC,其中有字段A、B和C,并且都是字符数据,其中A列存储了从A到Z之间的单个字母,查询出A列中字符在A到P之间的所有数据行
2、实现:
-- 创建数据表
use pubs
go
if exists (select * from sysobjects where name = ''ABC'') drop table ABC
go
create table ABC ( id varchar(1) )
go
-- 以5个字符为例
insert into ABC values (''A'')
insert into ABC values (''B'')
insert into ABC values (''C'')
insert into ABC values (''D'')
insert into ABC values (''E'')
go
select * from ABC where id between ''A'' and ''C''
go
实例7:
1、描述:
有学生成绩表,数据如下,查询出每门课都大于80分的学生姓名
2、实现:
-- 创建数据表
use pubs
go
if exists (select * from sysobjects where name = ''tb'') drop table tb
go
create table tb ( stuName varchar(20), course varchar(20), score int )
go
insert into tb values (''张千'',''语文'',80)
insert into tb values (''张千'',''数学'',77)
insert into tb values (''李万'',''语文'',66)
insert into tb values (''李万'',''数学'',91)
insert into tb values (''王亿'',''语文'',84)
insert into tb values (''王亿'',''数学'',100)
insert into tb values (''王亿'',''英语'',90)
insert into tb values (''杨兆'',''英语'',86)
insert into tb values (''杨兆'',''数学'',93)
go
select * from tb
go
-- 查询数据
select stuName from tb group by stuName having min(score) >= 80
go
实例8:
1、描述:
合并用户表,有3个表GameWOW,GameDiablo,GameStarCraft结构如下,将这三个表中的数据合并到新表Game中,新表结构如下,对于新表中存在而源表中不存在的记录,用NULL表示
2、实现:
use pubs
go
if exists (select * from sysobjects where name = ''GameWOW'') drop table GameWOW
go
if exists (select * from sysobjects where name = ''GameDiablo'') drop table GameDiablo
go
if exists (select * from sysobjects where name = ''GameStarCraft'') drop table GameStarCraft
go
if exists (select * from sysobjects where name = ''Game'') drop table Game
go
create table GameWOW
(
SName varchar(10),
SPassWord varchar(10),
SBirthday smalldatetime,
SAddress varchar(10),
SEmail varchar(10)
)
go
insert into GameWOW values (''wow'',''wow'',getdate(),''wow'',''wow'')
go
create table GameDiablo
(
SName varchar(10),
SPassWord varchar(10),
SBirthday smalldatetime,
SSex bit,
SCardNumber varchar(10)
)
go
insert into GameDiablo values (''diablo'',''diablo'',getdate(),1,''diablo'')
go
create table GameStarCraft
(
SName varchar(10),
SPassWord varchar(10),
SBirthday smalldatetime,
SArea varchar(10),
SCode int
)
go
insert into GameStarCraft values (''starcraft'',''starcraft'',getdate(),''starcraft'',1)
go
create table Game
(
SName varchar(10),
SPassWord varchar(10),
SBirthday smalldatetime,
SAddress varchar(10),
SEmail varchar(10),
SSex bit,
SCardNumber varchar(10),
SArea varchar(10),
SCode int
)
go
-- 合并
insert into Game (SName,SPassWord,SBirthday,SAddress,SEmail,SSex,SCardNumber,SArea,SCode)
select SName,SPassWord,SBirthday,SAddress,SEmail,null,null,null,null
from GameWOW union
select SName,SPassWord,SBirthday,null,null,SSex,SCardNumber,null,null
from GameDiablo union
select SName,SPassWord,SBirthday,null,null,null,null,SArea,SCode
from GameStarCraft
go
select * from Game
实例9:
1、描述:
在论坛中采用一定的格式为主帖进行编号,格式为:版块编号_当前日期_四位随机数字
2、实现:
select 主贴编号 = ''版块编号_'' + convert(varchar(4),datepart(yyyy,getdate())) +
convert(varchar(2),datepart(mm,datepart(mm,getdate()))) +
convert(varchar(2),datepart(dd,datepart(dd,getdate()))) +
convert(varchar(4),right(rand(datepart(ms,getdate())*1000),4))
今天关于sql-server – SQL Server 2000:用于执行连接聚合子查询的想法和sql语句聚合查询的分享就到这里,希望大家有所收获,若想了解更多关于.NET 中SQL Server 2000、SQL Server 2005 连接字符串、sql server 2000下载 php Sql Server连接失败问题及解决办法、SQL Server 2008 Internal #001 SQL Server 的版本Microsoft SQL、SQL Server 应用开发 --- SQL SERVER 2000 数据查询综合实例等相关知识,可以在本站进行查询。
本文标签: