重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
---下文举例分析了case when常用的用法,如下所示:涉及排序字段的应用
创新互联建站从2013年创立,是专业互联网技术服务公司,拥有项目网站制作、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元城关做网站,已为上家服务,为城关各地企业和个人服务,联系电话:13518219792
create table test
(
qty int ,
sort varchar(20)
)
insert into test(qty,sort)values
(1,'a'),(2,'b'),(3,'d'),(1,'e')
go
----方法1:
select sort,qty,
case qty
when 1 then '少'
when 2 then '中'
when 3 then '多'
else '未知'
end as [数量范围]
from test
--方法2:
select sort,qty,
case
when qty=1 then '少'
when qty=2 then '中'
when qty=3 then '多'
else '未知'
end as [数量范围]
from test
---sum统计用法
select
sum( case when qty=1 then 1 else 0 end) as [少],
sum( case qty when 2 then 1 else 0 end) as [中],
sum( case when qty=3 then 1 else 0 end) as [多],
sum( case when qty 1 and qty 2 and qty 3 then 1 else 0 end) as [位置]
from test
---case when 做排序字段
declare @i int
set @i=0
select * from test
order by
case @i when 0 then qty else sort end
go
truncate table test
drop table test
作用:数据类型转换
用法:cast(字段 as 类型),例如id字段是整型,现在要转化成字符型:cast(id as varchar)
SQL Server中还有一个功能类似的函数:convert(),其用法如下:
convert(类型,字段),引用上面的例子,则可以如此表示:convert(varchar(50),id)
1,对于日期字段字段
access表示为:#1981-28-12#
SQLSERVER2000表示为:''1981-02-12''
2,SQL语句区别,select ,update 在对单表操作时都差不多,
但多表操作时update语句的区别ACCESS与SQLSERVER中的UPDATE语句对比:
SQLSERVER中更新多表的UPDATE语句:
UPDATE Tab1
SET a.Name = b.Name
FROM Tab1 a,Tab2 b
WHERE a.ID = b.ID;
同样功能的SQL语句在ACCESS中应该是
UPDATE Tab1 a,Tab2 b
SET a.Name = b.Name
WHERE a.ID = b.ID;
即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后.
更新单表时:都为:
UPDATE table1 set ab='12',cd=444 where ....
3,delete语句
access中删除时用:delete * from table1 where a2 即只要把select 语句里的select 换成delete就可以了。
sqlserve 中则为: delete from table1 where a2 即没有*号
4,as 后面的计算字段区别
access中可以这样:select a,sum(num) as kc_num,kc_num*num as all_kc_num 即可以把AS后的字段当作一个数据库字段参与计算。
sqlserver 中则为:select a,sum(num) as kc_num,sum(num)*num as all_kc_num 即不可以把AS后的字段当作一个数据库字段参与计算。
5,[.]与[!]的区别
access中多表联合查询时:select tab1!a as tab1a,tab2!b tab2b from tab1,tab2 ,中间的AS可以不要。
sqlserve 中则:select tab1.a as tab1a,tab2.b tab2b from tab1,tab2 ,中间的AS可以不要。
6,联合查询时,
access中多表联合查询:'select a,b from(
select a,b from tab1 where a3 union select c,d from tab2 ) group by a,b
sqlserve 中则'select a,b from(
select a,b from tab1 where a3 union select c,d from tab2 ) tmptable group by a,b即要加一个虚的表tmptable,表名任意。---
7,access升级到sqlserver时,
可以用sqlserver的数据导入工具导入数据,但要做必要的处理。
access中的自动编号,不会自动转换SQL中的自动编号,只能转换为int型,要把它手工改成标识字段,种子为1,把所有导入被sqlserver转化成的以n开头的字段类型的n去掉,如nvarchar-varchar.把需要有秒类型的日期字段改成datatime类型(SQL会把所有的日期开转化成smalldatetime型)
8,true与1=1
access用where true表示条件为真,
sqlserver用where 1=1表示条件为真
9,判断字段值为空的区别
普通空:
Access和sql server一样 where code is null 或 where code is nol null
条件空:
Access:iif([num] is null,0,[num]) 或 iif([num] is null,[num1],[num])
SQLServer: isnull([num],0) 或 isnull([num],[num1])
10,SQL语句取子串的区别
access:MID(字段,n1,[n2]),LEFT(字段,n),RIGHT(字段,n)
如:select left(cs1,4)+'-'+cs2 as cs3
SQLServer: SUBSTRING(expression, start, length)
如:select substring(cs1, 1, 2) + substring(cs1, 4, 2) + '-' + cs2 as cs3
1、选择开始菜单中→程序→【ManagementSQLServer】→【SQLServerManagementStudio】命令,打开【SQLServerManagementStudio】窗口,并使用Windows或SQLServer身份验证建立连接。
2、在【对象资源管理器】窗口中展开服务器,然后选择【数据库】节点。
3、右键单击【数据库】节点,从弹出来的快捷菜单中选择【新建数据库】命令。
4、执行上述操作后,会弹出【新建数据库】对话框。在对话框、左侧有3个选项,分别是【常规】、【选项】和【文件组】。完成这三个选项中的设置会后,就完成了数据库的创建工作。
5、在【数据库名称】文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。
6、在【所有者】文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用【使用全文索引】复选框。
7、在【数据库文件】列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的【添加】、【删除】按钮添加或删除数据库文件。
8、切换到【选项页】、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。
9、切换到【文件组】页,在这里可以添加或删除文件组。
10、完成以上操作后,单击【确定】按钮关闭【新建数据库】对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再【对象资源管理器】窗口看到。
CREATE TRIGGER tr_xxx_i ON 表名
FOR INSERT AS
...(具体的功能写在这里,想取的插入的某值,就从 FROM inserted 里取...)
1、添加引用
using System.Data.SqlClient;
2、建立连接调用
SqlConnection myConnection = new SqlConnection("数据库连接字符串");
//数据库连接字符串通常是Data Source=localhost;Initial Catalog=数据库名;User ID=用户名;Password=密码
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText = string.Format("select count(*) from {0} where columName={1}",表明,列值);//构造SQL查询语句 String.Format (String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。 myCommand.Connection = myConnection;
try
{
myCommand.Connection.Open();
int count = (int)myCommand.ExecuteScalar();
if (count 0)
{
//count大于0表示有,调用自己写的一个方法来更新
UpdateData();
}
else
{
小于0表示没有,调用这个方法来插入
InsertData();
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
//UpdateData方法
public void UpdateData()
{
SqlConnection myConnection = new SqlConnection("数据库连接字符串");
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText = "用来更新的SQL语句";
myCommand.Connection = myConnection;
try
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
//InsertData方法
public void InsertData()
{
SqlConnection myConnection = new SqlConnection("数据库连接字符串");
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText = "用来插入的SQL语句";
myCommand.Connection = myConnection;
try
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
-----这些都是基础的写法,可以将其封装在一个工具类中,方便调用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace DBUtility
{
public class SqlHelper
{
//通过配置文件(app.config:xml)读取连接字符串
public static string connectionString = ConfigurationManager .ConnectionStrings["ConnectionString"].ConnectionString;
//字段,通过连接字符串获取连接对象
private SqlConnection con = new SqlConnection(connectionString);
//属性,判断连接对象的状态并打开连接对象
public SqlConnection Con
{
get {
switch (con.State)
{
case ConnectionState.Broken:
con.Close(); //先正常关闭,释放资源
con.Open();
break;
case ConnectionState.Closed:
con.Open();
break;
case ConnectionState.Connecting:
break;
case ConnectionState.Executing:
break;
case ConnectionState.Fetching:
break;
case ConnectionState.Open:
break;
default:
break;
}
return con; }
set { con = value; }
}
//执行存储过程或者SQL语句并返回数据集DataSet
public DataSet GetDataSet(string strSQL, CommandType cmdType, params SqlParameter[] values)
{
SqlCommand cmd = PrepareCommand(strSQL, cmdType, values);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
//执行存储过程或者SQL语句并返回SqlDatareader
public SqlDataReader GetDataReader(string strSQL, CommandType cmdType, params SqlParameter[] values)
{
SqlCommand cmd = PrepareCommand(strSQL, cmdType, values);
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
//执行存储过程或者SQL语句并返回首行首列(新增方法的主键)
public object ExecuteScalar(string strSQL, CommandType cmdType, params SqlParameter[] values)
{
SqlCommand cmd = PrepareCommand(strSQL, cmdType, values);
return cmd.ExecuteScalar();
}
//执行存储过程或者SQL语句并返回受影响行数
public int ExecuteNonQuery(string strSQL, CommandType cmdType, params SqlParameter[] values)
{
SqlCommand cmd = PrepareCommand(strSQL, cmdType, values);
return cmd.ExecuteNonQuery();
}
//内部方法,实例化命令对象并配置相关属性
private SqlCommand PrepareCommand(string strSQL, CommandType cmdType,params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = Con;
cmd.CommandText = strSQL;
cmd.CommandType = cmdType;
cmd.CommandTimeout = 60;
cmd.Parameters.AddRange(values);
return cmd;
}
}
}