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)