??xml version="1.0" encoding="utf-8" standalone="yes"?> IF OBJECT_ID('dbo.l计?) IS NOT NULL DROP TABLE l计? IF OBJECT_ID('dbo.l计?/span>') IS NOT NULL DROP TABLE l计?
]]>
]]>
]]>
你用了GROUP BY ?nbsp; ITEM.ITEMNUM q个字段分组,那其他字D内容不?变成一对多又改如何昄?比如下面所C?br />
A B
1 abc
1 bcd
1 asdfg
select A,B from table group by A
你说q样查出来是什么结?
A B
abc
1 bcd
asdfg
双3条如何变成一?所以需要用到聚合函?比如
select A,count(B) 数量 from table group by A
q样的结果就?br />A 数量
1 3
group by 有一个原?是 select 后面的所有列Q只要没有用聚合函数的列)必须出现?group by 后面
]]>
MMC 不能打开文g C:\Program Files\Microsoft SQL Server\80\Tools\BINN\SQL Server Enterprise Manager.MSC?br />
分析Q?br />
参看文g是否存在或被损坏?br />
无论那种Q先其删除
然后Q在q行框中输入 mmcQ打开控制?br />
执行以下三个步骤Q?br />
1、控制台--d/删除理单元--d--扑ֈMicrosoft SQL 企业理?-d--关闭--定
2、控制台--选项--控制台模式选择"用户模式完全讉K"--下面的选择全部取消
3、控制台--另存?-存储?C:\Program Files\Microsoft SQL Server\80\Tools\BINN\SQL Server Enterprise Manager.MSC
在第三步时可能会遇到“无法保存”Q这U现象?br />
则在q行框中输入 regsvr32 C:\Windows\system32\msxml3.dll
然后再执行上面的W三步,卛_
参考:http://www.leezao.cn/article.asp?id=467
]]>
string source = @" server = .kingsql;database = Northwind ; integrated security=SSPI ";
string source = @" server = .kingsql;database = Northwind ; uid = sa; pwd = sa ";
(2)q程q接
首先要保证客L与SQL服务器连接?br />具体如下说明Q?br />1Qping 服务器IP试q通与?br />q个实际上是看和q程sql server 2000服务器的物理q接是否存在。如果不行,h查网l,?看配|,当然得确保远Esql server 2000服务器的IP拼写正确?br />
2) 在Dos或命令行下输入telnet 服务器IP 端口Q看能否q?br />? telnet 202.114.100.100 1433
通常端口值是1433Q因?433是sql server 2000的对于Tcp/IP的默认侦听端口。如果有问题Q通常q一步会出问题。通常的提C是“……无法打开q接,q接 p|"?br />如果q一步有问题Q应该检查以下选项?br />1 查远E服务器是否启动了sql server 2000服务。如果没有,则启动?br />2 查服务器端有没启用Tcp/IP协议Q因E连接(通过因特|)需要靠q个协检查方法是Q在服务器上打开开始菜?>E序-> Microsoft SQL Server->服务器网l实用工P看启用的协议里是否有tcp/ip协议Q如果没有,则启用它?br />3 查服务器的tcp/ip端口是否配置?433端口。仍然在服务器网l实用工具里查看启用协议里面的tcp/ip的属性,保默认端口?433Qƈ且隐藏服务器复选框没有勾上?br />事实上,如果默认端口被修改,也是可以的,但是在客L做telnet试Ӟ写服务器端口h必须与服务器配置的端口号保持一致。如果隐藏服务器复选框被勾选,则意味着客户端无法通过枚D服务器来看到q台服务器,起到了保护的作用Q但不媄响连接,但是Tcp/ip协议的默认端口将被隐式修改ؓ2433Q在客户端连接时必须作相应的改变?br />4 如果服务器端操作pȝ打过sp2补丁Q则要对windows防火墙作一定的配置Q要对它开?433端口Q通常在测试时可以直接xwindows防火墙(其他的防火墙也关掉最好)?br />5 查服务器是否?433端口侦听。如果服务器没有在tcpq接?433端口侦听Q则是连接不上的。检查方法是在服务器的dos或命令行下面输入netstat -a -n 或者是netstat -anQ在l果列表里看是否有类似tcp 127.0.0.1 1433 listening的项。如果没有,则通常需要给sql server 2000打上臛_sp3的补丁。其实在服务器端启动查询分析器,输入 select @@version 执行后可以看到版本号Q版本号?.0.2039以下的都需要打补丁。如果以上都没问题,q时你再做telnet 服务器ip 1433 试Q将会看到屏q一 闪之后光标在左上角不停闪动。恭喜你Q你马上可以开始在企业理器或查询分析 器连接了?br />
一般写法可以这样子够用了,Ҏ们这些菜鸟来讲就够了Q至于复杂的以后在写Q?br />
SqlConnection conn = new SqlConnection("Server=.;DataBase=Northwind;Uid=sa;pwd=123;");
Server=.;目标服务器IP本地?(Local),
DataBase 数据库名U?br />Uid ,User ID , q接数据库的用户?br />pwd Password 是连接数据库的密?br />//如果没有׃要写否则报错
]]>
CREATE TABLE l计?(方便?INT,茶叶 INT,面包 INT,口香p?INT,牛奶 INT,ȝ?INT,可乐 INT,冰糖 INT,牙膏 INT,牙刷 INT,故事?INT,味素 INT,食盐 INT,榨菜 INT,食醋 INT)
INSERT INTO l计?
SELECT 1,0,0,0,0,1,0,0,0,1,0,0,1,0,0 UNION ALL
SELECT 1,1,0,0,0,1,0,0,0,0,1,1,0,1,0 UNION ALL
SELECT 0,1,1,1,0,1,1,1,0,1,0,0,1,1,0 UNION ALL
SELECT 1,1,0,0,1,1,0,1,1,0,0,1,1,0,0 UNION ALL
SELECT 0,1,1,0,0,1,0,1,0,0,0,0,1,1,1 UNION ALL
SELECT 1,1,0,0,1,1,0,1,1,0,0,0,0,1,0 UNION ALL
SELECT 1,1,1,0,0,1,0,1,0,0,0,1,1,0,0 UNION ALL
SELECT 0,0,1,0,0,1,0,1,0,0,0,0,1,1,1 UNION ALL
SELECT 1,1,1,0,0,1,0,1,1,0,1,1,0,1,0 UNION ALL
SELECT 1,1,1,1,0,1,1,1,0,1,1,0,1,0,1 UNION ALL
SELECT 0,0,1,1,1,1,0,1,0,1,0,1,1,1,0 UNION ALL
SELECT 1,1,1,1,1,1,0,1,0,1,0,0,1,1,1
Select * from l计?
l计表的商品名ؓn列,不只上面列出的那么多Q如何实现nl数l输出,x多少个字D就输出从一l直到nl的数组Q?
具体目标Q现有一参考?.25Q要输出满条g?到nl数l,其中一l数l统计单个商品名出现1的合计数Q即每一个商品名出现一?q一ơ?
二维数组l计ZW一列方侉K开始v与相ȝ茶叶都ؓ1Q?的关p(依次l合查询每相M个满x件的关系Q?
详细Q即从第一行找到最后一行,如发现@环组合满都?Q?q样关系?个,即sumCؓ5Q依ơ再找从W一列方侉K开始v与相隔一个位|的面包都ؓ1Q?的关p,如满L关系从第一行到最后有3个即sumD?Q依ơ类推再从第一列方侉K开始与盔R两位|的口香p组合都?Q?的关p,q样一直找到方侉K与最后一列食醋(即第n列)的关p都?Q?的位|,再从开始的W二列@环与之后的每列依ơ组合查?Q?的关p,直到循环C榨菜开始与最后一列食醋(Wn列)?Q?的关p,二维数组循环完毕?
输出Q如每以l合列满x件的sum?所有行?gt;=0.25则输?该组合商品名Uͼ例如Q茶Ӟ冰糖Q组合关pMؓQ?Q?Q的sum?总行?gt;=0.25 则需结果(茶叶,冰糖Q输出到 l果?的values 字段Q三l数l与nl数l算法与二维数组怼
l果表输出样式:Q中间以逗号分开Q?
l果?
values
{方便?口香p?牛奶,食醋}
{Q茶?冰糖Q(口香p?ȝ杯)Q榨?食醋Q}
{Q方侉K,茶叶,牛奶Q(茶叶,口香p?冰糖Q(ȝ?食盐,食醋Q?}
{Qnl数l?Q(nl数l?Q(nl数l?Q(nl数l?Q(...Q(nl数lnQ}
请问上面的数据查询如何实玎ͼ误Z码!Q?
CREATE TABLE l计?(方便?INT,茶叶 INT,面包 INT,口香p?INT,牛奶 INT,ȝ?INT,可乐 INT,冰糖 INT,牙膏 INT,牙刷 INT,故事?INT,味素 INT,食盐 INT,榨菜 INT,食醋 INT)
INSERT INTO l计?
SELECT 1,0,0,0,0,1,0,0,0,1,0,0,1,0,0 UNION ALL
SELECT 1,1,0,0,0,1,0,0,0,0,1,1,0,1,0 UNION ALL
SELECT 0,1,1,1,0,1,1,1,0,1,0,0,1,1,0 UNION ALL
SELECT 1,1,0,0,1,1,0,1,1,0,0,1,1,0,0 UNION ALL
SELECT 0,1,1,0,0,1,0,1,0,0,0,0,1,1,1 UNION ALL
SELECT 1,1,0,0,1,1,0,1,1,0,0,0,0,1,0 UNION ALL
SELECT 1,1,1,0,0,1,0,1,0,0,0,1,1,0,0 UNION ALL
SELECT 0,0,1,0,0,1,0,1,0,0,0,0,1,1,1 UNION ALL
SELECT 1,1,1,0,0,1,0,1,1,0,1,1,0,1,0 UNION ALL
SELECT 1,1,1,1,0,1,1,1,0,1,1,0,1,0,1 UNION ALL
SELECT 0,0,1,1,1,1,0,1,0,1,0,1,1,1,0 UNION ALL
SELECT 1,1,1,1,1,1,0,1,0,1,0,0,1,1,1
Go
Create PROC xb_GetArray(@l数 INT, @pL float ,@l果 VARCHAR(1000) out )
AS
SET NOCOUNT ON
IF OBJECT_ID('dbo.Tmp') IS NOT NULL DROP TABLE dbo.Tmp
CREATE TABLE Tmp(id INT,NAME VARCHAR(20))
INSERT Tmp SELECT colid,NAME FROM syscolumns s WHERE id=OBJECT_ID('l计?/span>')
IF OBJECT_ID('tempdb.dbo.#') IS NOT NULL DROP TABLE #
CREATE TABLE #(ws INT,Result VARCHAR(1000))
DECLARE @num INT
DECLARE @f FLOAT
DECLARE @sql nVARCHAR(1000)
DECLARE @id VARCHAR(100),@w VARCHAR(100),@wh VARCHAR(100),@c VARCHAR(100)
DECLARE @Step int ,@i INT ,@j INT ,@s INT,@l INT
SET @f=@pL
SELECT @num=count(1) FROM tmp
SET @i=1
SET @Step=@l数
set @l果=''
WHILE @i<=@num
BEGIN
SET @wh=REPLICATE('1,',@Step)
SET @j=@i
WHILE @j<=@num-(@Step-1)
BEGIN
SELECT @l=1,@id='',@w='',@c=NULL
WHILE @l<=@Step-1
BEGIN
SET @id=@id+LTRIM(@j+@l)+','
SET @l=@l+1
END
SELECT @id=ltrim(@i)+','+@id
SELECT @w=@w+'+ltrim('+NAME+')+'+''',''',@c=ISNULL(@c+',','')+Name FROM tmp WHERE CHARINDEX(','+LTRIM(id)+',',','+@id)>0 ORDER BY id
SET @w=STUFF(@w,1,1,'')
SET @sql=N'if ((select count(*)*1.0 from l计?where '+@w+'='''+@wh+''')/'+LTRIM(@num)+'>' +LTRIM(@f) +') insert # select '+ltrim(@Step)+',''('+ @c+'Q?'''
EXEC(@sql)
SET @j=@j+1
END
SET @i=@i+1
END
SET @sql=NULL
SELECT @sql=ISNULL(@sql+'','')+result FROM (SELECT DISTINCT result FROM # ) aa
SET @l果='{'+@sql+'}'
GO
DECLARE @sql VARCHAR(1000)
exec xb_GetArray 2,0.3,@sql OUT
SELECT @sql 二维
--result
/*
一l?
---------------------------------------------------------------------------
{(冰糖Q?(ȝ杯),(茶叶Q?(方便面),(面包Q?(食盐Q?(味素Q?(牙刷Q?(榨菜Q?}
Q所影响的行Cؓ 1 行)*/
DECLARE @sql VARCHAR(1000)
exec xb_GetArray 2,0.3,@sql OUT
SELECT @sql 二维
/*二维
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{(冰糖,食盐Q?(冰糖,榨菜Q?(ȝ?冰糖Q?(ȝ?食盐Q?(ȝ?味素Q?(ȝ?牙刷Q?(ȝ?榨菜Q?(茶叶,冰糖Q?(茶叶,ȝ杯),(茶叶,面包Q?(茶叶,食盐Q?(茶叶,榨菜Q?(方便?冰糖Q?(方便?ȝ杯),(方便?茶叶Q?(方便?食盐Q?(面包,冰糖Q?(面包,ȝ杯),(面包,食盐Q?(面包,榨菜Q?(食盐,榨菜Q?(牙刷,食盐Q?}
Q所影响的行Cؓ 1 行)*/
]]>
]]>
DROP TABLE file_table;
GO
CREATE TABLE file_table(FileName nvarchar(60), FileType nvarchar(60), Document varbinary(max))
GO
INSERT INTO file_table(FileName, FileType, Document)
FROM OPENROWSET(BULK 'C:/myText.txt', SINGLE_BLOB) AS Document FROM OPENROWSET(BULK 'C:/Img252837387.jpg', SINGLE_BLOB) AS Document FROM OPENROWSET(BULK 'C:/1.rar', SINGLE_BLOB) AS Document
SELECT 'myText.txt' AS 文g? '.txt' AS 文gcd, *
INSERT INTO file_table(FileName, FileType, Document)
SELECT 'Img252837387.jpg' AS 文g? '.jpg' AS 文gcd, *
INSERT INTO file_table(FileName, FileType, Document)
SELECT '1.rar' AS 文g? '.rar' AS 文gcd, *
GO
可以观察?是根据年龄升序排列了Qƈ且row_number()是给Z序列号了,q个序列可重命名ؓRow Number by Age,
?span style="color: #ff00ff">sql server2000Ҏ:
如果在sql server2000中实现相寚w烦一些,我们可以利用IDENTITY()函数实现Q但IDENTITY()函数只能用在sql server2000临时表中Q因此需要将数据索到临时表里?br />select identity(int,1,1) as [Row Number by Age],FirstName,Age into #A from Person order by Age
select * from #A
drop table #a
如果不想按年龄排?可以q样?br />SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [Row Number by Record Set], FirstName, Age FROM Person
另外一个例?br />SELECT ROW_NUMBER() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender], FirstName, Age, Gender FROM Person
Partition by Gender FirstName Age Gender -------------------- ---------- ----------- ------ 1 Doris 6 F 2 Mary 11 F 3 Sherry 11 F 4 Sue 29 F 1 Larry 5 M 2 George 6 M 3 Sam 17 M 4 Ted 23 M 5 Marty 23 M 6 Frank 38 M 7 John 40 M注意,姓名M开?序号又从1,2,3开始了
2.RANK( )函数
先看例子
SELECT RANK() OVER (ORDER BY Age) AS [Rank by Age], FirstName, Age FROM Person
输出如下:
Rank by Age FirstName Age -------------------- ---------- ----------- 1 Larry 5 2 Doris 6 2 George 6 4 Mary 11 4 Sherry 11 6 Sam 17 7 Ted 23 7 Marty 23 9 Sue 29 10 Frank 38 11 John 40
看到了么,同年岭的?有相同的顺?序?,2,2,4了?/pre>?span style="color: #ff00ff">sql server2000Ҏ:
出现了RANK()函数实在是方?在sql server2000里实现排序ƈ列的问题ȝ很多?br />select [Rank by Age]=isnull((select count(*) from person where Age>A.Age),0)+1,FirstName,Age from Person A order by [Rank by Age]SELECT RANK() OVER(PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName, Age, Gender FROM Person输出?/pre>Partition by Gender FirstName Age Gender -------------------- ---------- ----------- ------ 1 Doris 6 F 2 Mary 11 F 2 Sherry 11 F 4 Sue 29 F 1 Larry 5 M 2 George 6 M 3 Sam 17 M 4 Ted 23 M 4 Marty 23 M 6 Frank 38 M 7 John 40 M可以看到,按性别分组?每个性别分组?l箋是用了rank( )函数
3.DENSE_RANK( )函数
SELECT DENSE_RANK() OVER (ORDER BY Age) AS [Dense Rank by Age],
FirstName,
Age
FROM Person
输出l果?
Dense Rank by Age FirstName Age
-------------------- ---------- -----------
1 Larry 5
2 Doris 6
2 George 6
3 Mary 11
3 Sherry 11
4 Sam 17
5 Ted 23
5 Marty 23
6 Sue 29
7 Frank 38
8 John 40
看到了么,和rank函数区别?序始终是连l的,Doris 和George同年,都是排第2?但之后的mary不象rank函数那样排第4,而是排第3位了
4.ntile( )函数
SELECT FirstName,
Age,
NTILE(3) OVER (ORDER BY Age) AS [Age Groups]
FROM Person输出l果Q?br />FirstName Age Age Groups
---------- ----------- --------------------
Larry 5 1
Doris 6 1
George 6 1
Mary 11 1
Sherry 11 2
Sam 17 2
Ted 23 2
Marty 23 2
Sue 29 3
Frank 38 3
John 40 3
q个函数按照ntile(n)中的N,把记录强制分成多段,11条记录现在分?D了,lary到mary是第1D?sherry到maty是第2D?sue到john是第3D了?/p>
一、不用where
举个例子Q如果您做查询页面,q且Q可查询的选项有多个,同时Q还让用戯行选择q输入查询关键词Q那么,按^时的查询语句的动态构造,代码大体如下Q?/p>
string MySqlStr=”select * from table where”Q?/p>
if(Age.Text.Lenght>0)
{
MySqlStr=MySqlStr+“Age=“+“'Age.Text'“Q?br /> }
if(Address.Text.Lenght>0)
{
MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“Q?br /> }
①U假?/p>
如果上述的两个IF判断语句Q均为TrueQ即用户都输入了查询词,那么Q最l的MySqlStr动态构造语句变为:
MySqlStr=”select * from table where Age='18'
可以看得出来Q这是一条完整的正确的SQL查询语句Q能够正的被执行,q根据数据库是否存在记录Q返回数据?/p>
②U假?/p>
如果上述的两个IF判断语句不成立,那么Q最l的MySqlStr动态构造语句变为:
MySqlStr=”select * from table where“
现在Q我们来看一下这条语句,׃where关键词后面需要用条Ӟ但是q条语句Ҏ׃存在条gQ所以,该语句就是一条错误的语句Q肯定不能被执行Q不仅报错,同时q不会查询到M数据?/p>
上述的两U假设,代表了现实的应用Q说明,语句的构造存在问题,不以应付灵zd变的查询条g?/p>
二、?where
假如我们上q的语句改ؓQ?/p>
string MySqlStr=”select * from table where
if(Age.Text.Lenght>0)
{
MySqlStr=MySqlStr+“and Age=“+“'Age.Text'“Q?br /> }
if(Address.Text.Lenght>0)
{
MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“Q?br /> }
现在Q也存在两种假设
①U假?/p>
如果两个IF都成立,那么Q语句变为:
MySqlStr=”select * from table where
②U假?/p>
如果两个IF都不成立Q那么,语句变ؓQ?/p>
MySqlStr=”select * from table where 1=1”Q现在,我们来看q条语句Q由于where 1=1 是ؓTrue的语句,因此Q该条语句语法正,能够被正执行,它的作用相当于:MySqlStr=”select * from table”Q即q回表中所有数据?/p>
a下之意就是:如果用户在多条g查询面中,不选择M字段、不输入M关键词,那么Q必返回表中所有数据;如果用户在页面中Q选择了部分字Dƈ且输入了部分查询关键词,那么Q就按用戯|的条gq行查询?/p>
说到q里Q不知道您是否已明白Q其实,where 1=1的应用,不是什么高U的应用Q也不是所谓的化的构造,仅仅只是Z满多条件查询页面中不确定的各种因素而采用的一U构造一条正能q行的动态SQL语句的一U方法?/p>
where 1=0; q个条g始终为falseQ结果不会返回Q何数据,只有表结构,可用于快速徏?/p>
"SELECT * FROM strName WHERE 1 = 0"; 该select语句主要用于d表的l构而不考虑表中的数据,q样节省了内存,因ؓ可以不用保存l果集?
create table newtable as select * from oldtable where 1=0; 创徏一个新表,而新表的l构与查询的表的l构是一L.
1=1 永真Q?1<>1 永假?/p>
1<>1 的用处:
用于只取l构不取数据的场?br />例如Q?br />create table table_temp tablespace tbs_temp as
select * from table_ori where 1<>1
建成一个与table_ori l构相同的表table_tempQ但是不要table_ori 里的数据。(除了表结构,其它l?/p>
构也同理)