❶ Tsql和SQL区别
SQL(StructuredQuery Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。主要包括:数据定义语言(DDL)数据操纵语言(DML) 数据控制语言(DCL)三种类型。其中数据定义语言(DDL) 用于定义数据结构,比如创建create、删除drop、更改alter数据库对象等。数据操纵语言(DML)用于检索和修改数据结构,即我们常说的:增Insert ,删Delete
改Update,查Select。数据控制语言(DCL) 用于规定数据库用户的各种权限。
T-SQL:SQL 程序设计语言的增强版,它是用来让应用程式与 SQL Server 沟通的主要语言。T-SQL 提供标准 SQL的DDL 和 DML功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。
❷ T-SQL语法问题
IF EXEC(@sql) = 1 当然不行
请看例子:@colName列只可为一列bit
DECLARE @sql varchar(1000),@colName varchar(1000)
set @colName='*'
SET @sql = 'SELECT '+@colName+ ' FROM [tableName]'
exec(@sql)
DECLARE @sql nvarchar(1000),@colName nvarchar(1000),@Bit bit--改为nvarchar,再用sp_executesql
set @colName='BitColumn'
SET @sql = 'SELECT @Bit='+@colName+ ' FROM [tableName]'
exec sp_executesql @sql,'@Bit bit output',@Bit output
if @Bit=0
..
else
❸ 请t-sql 高手看过来,这条sql语句怎么写
select category_name+title from table1 a inner join table2 b
on a.category_id=b.category_id
❹ 求T_SQL语句!
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名
--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
❺ 什么是T-SQL
简单来说:T_SQL是SQL语言(结构化查询语言)的增强版,他是一种编程语言,可以完成复杂的 逻辑。
如果再具体点的话:
T-SQL :
SQL 程式设计语言的增强版,它是用来让应用程式与 SQL Server 沟通的主要语言。T-SQL 提供标准 SQL的DDL 和 DML 功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。
意识是在普通的sql语句中很多带有条件的查询是做不了的,例如 你要读取一个表时间所以年份的数据,可以使用函数
YEAR 传回指定日期年份部分的完整整数。使用方式为 YEAR(date) 。例如:以下陈述式 SELECT YEAR('07/11/01') 将会传回值 2007。
❻ T-sql 语句 怎么写
check (性别 in(1,0))
不过bit类型除了null,本来就只能存0,1了
❼ T-SQL的基本语法
一:insert语句
into 关键字是可选的
values关键字前面的()是可选的,这里是要接收数据的列
values后面,有两种方式提供值
1:显式的给出值 2:从select语句中导出值
insert语句注意几点
1:不要理标志列,系统会给你插入的
2:给出实际的值,如果没有,那就null
3:给出默认的值,default关键字,告诉数据库取默认值
insert into ... select
什么时候会这么用,当成批的数据来自
1:数据库中的另一个表
2:同一台服务器完全不同的数据库
3:另一个SQLSERVER的数据库
4:来自同一个表中的数据
说实在的2和3我从来没用过
好,看一个例子
declare @mytable table
(
id int,
sortid int
);
insert into @mytable (id,sortid) select id,classid from proct;
select * from @mytable;
注意我定义了一个表的对象
每一句之间是用分号隔开的
(id,sortid) 是可以忽略的
二:update语句
看例子
update e set e.flag = 'm' from employee e join contact ce on e.id = ce.employeeid where ce.name = 'jo'
这里用到了join子句,当然是可以用的
如果修改不止一列 只要加一个逗号
set num = num * 1.2当然可以写表达式
三:delete语句
delete from actors from actors a left join film f on a.filmid = f.filmid where f.filmid is null
outer连接将在没有匹配的一端返回null,
这里也就是film表没有匹配的行是null
注意 is null 的写法
四: select语句
这里还是不说了,还是多说说子句吧
五:where子句
1:
= > < >= <= <> != !> !<
其中<> 与 !=都是不相等的意思
!>与!<不怎么常见,但仔细想想也没什么用处
2:
and or not
如果一个where子句中同时出现这三个操作符
最先评估not 然后是and 然后是or
3:
between 例子 between 1 and 5 这个就不多说了
4:
like 例子:like "xland%"
%和_是通配符
%代表零个或多个任意字符
_表示单个任意字符
把字符包括在方括号中
[a-c]表示a b c都可行
[ab]表示a或b
^与not表示下一个字符将被排除掉
5:
in 例子 in ( 1,2,3) 这个也不多说了
六:order by子句
order by由于比较常用 我这里就不多说了
1:order by username 是可以识别中文的(sql先把中文转换成拼音再进行排序)
2:可以对 查询到的表中的任何列 进行排序 无论该列是否包含在select列表中
3:基于多个列的order by
例如:order by addtime,id
先按时间排序,再在这个基础上根据id排序,你也看到了,性能是有很大幅度的降低的
七:distinct关键字
select count(distinct column) from table
检索某一列不重复的记录数
八:group by 聚集函数 和 having子句
先看例子:
select orderid sum(orderMoney) from sales where orderid between 3 and 123 group by orderid
注意这里的orderid在表里是有可能重复的
这个语句的作用是检索出orderid从3到123的记录,
然后在这个记录集合上 以orderid分组
把orderid相同的数据分到一组 (这一组就是最终结果的一条记录)
然后通过sum函数把各组的orderMoney数据相加,
结果是最终结果的第二个字段
我发现用group by子句基本上都是和聚集函数一起用的
举几个聚集函数的例子
sum 求和
avg求平均数
min/max求最大和最小值
count(表达式|*)获取一个查询中的行数
只说说count吧:
count(coloum)如果这一列有null,那么这些null的行将不会计算在内
count(*)将得到表里的所有行的数目
聚集函数不一定非和group by一起使用不可
(另外avg基本上都是和group by一起使用的)
having子句是在组上放置条件的
看例子
select orderid sum(orderMoney) from sales where orderid between 3 and 123 group by orderid having sum(orderMoney)>5
group by得到了一个记录的集合
然后通过having子句,再在这个集合上做筛选
❽ 关于T-SQL语句。
--先修改字段的数据类型
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_Info
(
Id int NOT NULL IDENTITY (1, 1),
Name varchar(20) not null,
Sex bit not null,
Adress varchar(200) null,
OrgId nvarchar(50) NULL,
Phone varchar(30)
) ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_Info ON
GO
IF EXISTS(SELECT * FROM dbo.Info)
EXEC('INSERT INTO dbo.Tmp_Info (myID, OrgId)
SELECT id,name,sex,adress, CONVERT(nvarchar(50), OrgId) ,phone FROM dbo.Info WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_Info OFF
GO
DROP TABLE dbo.Info
GO
EXECUTE sp_rename N'dbo.Tmp_Info', N'Info', 'OBJECT'
GO
ALTER TABLE dbo.Info ADD CONSTRAINT
PK_Info PRIMARY KEY CLUSTERED
(
id
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
--更新字段的值
declare @old nvarchar(5)
declare @new nvarchar(50)
select @old='100',@new='1|2|3'
update info set OrgId=@new where OrgId=@old
❾ T-SQL语句
execute ('select sc.sno,sname,sdept from student,sc where sc.sno=student.sno and student.sdept='+'''+@kh+''')
改为:
execute ('select sc.sno,sname,sdept from student,sc where sc.sno=student.sno and student.sdept=@kh)
❿ T-sql语句
select count(sc.) from s,c,sc where s.sno=sc.sno and c.cno.sc.cno group by c.cteacher,c.cno where sc.scgrade<60
这么没有环境,可能需要调整