sqlindexin
① sql server中 表中如何创建索引
if exists(select *from sys.objects where naem = 'newindex')
drop index newindex
create index
--===================================
竟然没有悬赏...唉...
那算了吧
我还是都告诉你吧..
看个示例
自己琢磨去:
--==============================================
use master
go
if db_id(N'zhangxu')is not null
drop database zhangxu
go
create database zhangxu
sp_helpdb zhangxu
use zhangxu
go
IF EXISTS (SELECT *FROM SYS.OBJECTS WHERE NAME = N'WORKER')
DROP TABLE WORKER
GO
create table worker
(
w_id int identity (1000,1) not null,
w_name Nvarchar(10) unique,
w_age SMALLINT CONSTRAINT CK_W_AGE CHECK(w_age>20 and w_age<150),
w_pay money DEFAULT 0,
CONSTRAINT PK_W_ID PRIMARY KEY(W_ID)
)
SELECT *FROM WORKER--用查询技术查看表信息
sp_help worker--利用存储过程查看表信息
/*
创建简单的非聚集索引
*/
USE ZHANGXU
GO
if exists(select name from sys.indexes where name = N'IX_ID_NAME')
DROP INDEX IX_ID_NAME on worker
go--检查是否存在索引,有则删除索引
create index IX_ID_NAME--创建索引
on worker(w_id,w_name)--在ID NAME 两个字段上创建非聚集索引
drop index worker.IX_ID_NAME--删除索引
select *from sys.indexes where name = 'IX_ID_NAME'--查看索引
/*
创建唯一非聚集索引
*/
USE ZHANGXU
GO
IF EXISTS(SELECT NAME FROM SYS.INDEXES WHERE NAME = N'IX_W_NAME')
DROP INDEX IX_W_NAME ON WORKER
GO
CREATE UNIQUE INDEX IX_W_NAME--唯一非聚集索引
ON WORKER(W_NAME)
/*
查看索引T-SQL脚本
*/
--IX_W_NAME 唯一 非聚集索引
USE [zhangxu]
GO
/****** 对象: Index [IX_W_NAME] 脚本日期: 07/29/2007 16:54:53 ******/
CREATE UNIQUE NONCLUSTERED INDEX [IX_W_NAME] ON [dbo].[worker]
(
[w_name] ASC
)
WITH
(
SORT_IN_TEMPDB = OFF,
DROP_EXISTING = OFF,
IGNORE_DUP_KEY = OFF,
ONLINE = OFF
)
ON [PRIMARY]
--PK_W_ID聚集索引
USE [zhangxu]
GO
/****** 对象: Index [PK_W_ID] 脚本日期: 07/29/2007 16:56:45 ******/
ALTER TABLE [dbo].[worker]
ADD CONSTRAINT [PK_W_ID] PRIMARY KEY CLUSTERED
(
[w_id] ASC
)
WITH
(
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
ONLINE = OFF
) ON [PRIMARY]
--UQ_WORKER 唯一,非聚集索引
USE [zhangxu]
GO
/****** 对象: Index [UQ__worker__07020F21] 脚本日期: 07/29/2007 16:58:38 ******/
ALTER TABLE [dbo].[worker]
ADD UNIQUE NONCLUSTERED
(
[w_name] ASC
)
WITH
(SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
ONLINE = OFF
) ON [PRIMARY]
select *from worker
insert into worker(w_name,w_age,w_pay) values('王国龙',25,4500)
② SQL语句中INDEX函数
1。这是oracle语法
2。 /*+ INDEX(SLMS_TRALOG_T SLMS_TRALOG_CALLED_IDX ) */ 意思是,在这个查询中使用SLMS_TRALOG_T表的SLMS_TRALOG_CALLED_IDX索引,当然后边的where条件中会用到这个索引
补充一点,这个不叫INDEX函数,叫强制使用索引
③ 关于SQL中IN 的用方法
你是说每个字段的值有可能是:1,2,3形式?然后要查找其中一个值是否在里面?
形式是不是?:
b字段
1,2,3
3,4,8
3,45
如果是可以用下面这个查询(查询b列中包括5值的记录):
select
A
from
taba
where
b
IS
NOT
NULL
AND
CHARINDEX('5',
b)>0
否则,如果是要查找某一列是否存在某一个值的话,直接用IN就可以做到哟。
比如查询某列是否存在5
select
A
from
taba
where
b
IS
NOT
NULL
AND
b=5
如果你的列是单个值,而你想要判断某列的值是否在指定的值中,你的值形式为:1,2,3,4
如果你想查询b字段中值是否包括在1,2,3,4中,用下面语句
select
A
from
taba
where
b
IS
NOT
NULL
AND
CHARINDEX(b,'1,2,3,4')>0
你可以试试,还是不太明白。
========================================
不太明白意思哟。能把数据类型,格式说下不?int?
是一条记录里面某个字段有多个值呢,还是某列的全部记录有多个值呢?
如果是第一种情况,先转换成字段串,然后用CHARINDEX或PATINDEX判断是否存在某个值就可以了,如果是第二种情况用联合查询。
④ 请将下面的SQL语句转换成ORACLE(PL/SQL)
本人把操作放入了一个存储过程over,也可以不把它放入存储过程,直接执行也行,希望对你有帮助,
=====================================================================================
create or replace procere over() is
v_wip_sta_type varchar2(10);
v_prior_level varchar2(10);
v_new_groupid varchar2(10);
V_discrepancy_time int;
v_exceeded_time number;
dh varchar2(10);
dh_in varchar2(10);
jnsxh varchar2(10);
flh varchar2(10);
ajh varchar2(10);
ajtm varchar2(10);
bgqx varchar2(10);
index_text int;
index_in int;
begin
flh:='09';
index_text:=1;
if index_text<20 then
begin
ajh:=right(convert(varchar(5),index_text+10000),4);----我不太清楚你这个right(convert(varchar(5),index_text+10000),4)是干什么用的
dh:=flh || '-'+ajh;
insert into aj65 (dalx, bm_id, jg_id, qzh, dh, flh, ajh, ajtm, bgqx)
values('aj6571',0,0,'',dh,flh,ajh,'文件标题'||dh,'长期')
index_text:=index_text+1;
index_in:=1;
if index_in<=20 then
jnsxh:=right(convert(varchar(5),index_text+10000),4)
dh_in:=dh||'-'+jnsxh;
insert into jn65 (dalx, bm_id, jg_id, qzh, dh, flh, ajh, wjbt, bgqx, jnsxh)
values('jn6572',0,0,'',dh_in,flh,ajh,'文件标题'||dh,'长期',jnsxh)
index_in:=index_in+1
end if;
end;
end if;
end over;
⑤ sql in 参数
@string--参数改为"1,2,3",可用like \patindex\charindex处理
--如:
select * from tableName where ','+@string+',' like '%,'+rtrim(a)+',%'
⑥ SQL子查询中IN太多,该如何优化让查询速度更快
in可以用exists代替,原则上集合数少用IN比较快,集合数据大用exists比较好
⑦ 怎样在sql语句的in子句中使用单引号
用动态语句吧
declare @f varchar(20)
set @f='''张三'',''李四'''
declare @sqlstr varchar(8000)
set @sqlstr='
SELECT *
FROM INS_ReportIndex where fillperson in ('+@f+') '
exec (@sqlstr)