一些常用的SQL
--獲得表的列數
select count(1) from syscolumns where id=object_id('tableName')
--修改表名,把表a改為b
exec sp_rename 'a','b'
--關閉自動增長列
set identity_insert Jxt_DeviceManage_Config on
--關閉外鍵限制
ALTER TABLE tableName NOCHECK CONSTRAINT ALL
--啟用外鍵限制
ALTER TABLE tableName CHECK CONSTRAINT ALL
SELECT Sex=CASE(sex) WHEN '1' THEN '男' ELSE '女' END FROM tableName
周遊一棵樹下所有子節點(no是PK,parentNo是父節點,tblStall是表名):
CREATE FUNCTION funGetStallChildID(@id INT) --用于周遊子節點的函數
RETURNS @re TABLE(tid INT)
AS
BEGIN
INSERT INTO @re SELECT [no] FROM tblStall WHERE [email protected]
WHILE @@ROWCOUNT>0
INSERT INTO @re SELECT a.[no]
FROM tblStall a INNER JOIN @re b ON a.parentNo=b.tid
WHERE a.[no] NOT IN(SELECT tid FROM @re)
RETURN
END
關于課程表的存儲過程:
CREATE TABLE Curriculum(
ID int IDENTITY(1,1),
UnitCode varchar(20) NOT NULL, --機關編碼
GradeCode varchar(20) NOT NULL, --年級編碼
ClassCode varchar(20) NOT NULL, --班級編碼
WeekDay smallint NOT NULL, --星期幾
Serial int NOT NULL, --節次
Subject varchar(10) NOT NULL, --科目編碼
CONSTRAINT PK407 PRIMARY KEY NONCLUSTERED (ID)
)
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,1,1,'國文'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,1,2,'數學'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,1,3,'實體'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,1,4,'化學'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,2,1,'政治'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,2,2,'生物'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,2,3,'曆史'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,2,4,'地理'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,3,1,'體育'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,3,2,'音樂'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,3,3,'美術'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,3,4,'英語'
insert into Curriculum(UnitCode,GradeCode,ClassCode,WeekDay,Serial,Subject)
select 1,1,1,4,1,'勞動'
declare @s varchar(8000)
set @s = ''
select
@s = @s + ',['+a.item+'] = max(case when WeekDay = '+rtrim(WeekDay)+' and Serial = '+rtrim(Serial)+' then Subject end)'
from
(select
WeekDay,
Serial,
('星期'+rtrim(WeekDay)+'第'+rtrim(Serial)+'節') as item
from
Curriculum
group by
WeekDay,Serial) a
order by
a.WeekDay,a.Serial
set @s = 'select ''機關''+GradeCode+''年級''+ClassCode+''班'' as 班 ' + @s + ' from Curriculum group by UnitCode,GradeCode,ClassCode'
exec(@s)
select * from Curriculum
按季度顯示銷售量:
CREATE TABLE Pivot
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
GO
SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Pivot
GROUP BY Year
關于時間格式的一些寫法
IF EXISTE(SELECT domain_name FROM information_schema.domains
WHERE domain_schema='dbo'AND domain_name='member_no')
EXEC sp_droptype member_no
exec sp_addtype mytime,'varchar(20)','null','default right(char(8),getdate(),120)'
create rule rule_zip as
@x like '[0-9][0-9][0-9][0-9][0-9][0-9]'
CREATE RULE time_rule AS @time like 'yyyy-mm-dd' or len(@time)=0
EXEC sp_addtype type_time,'Datetime'
EXEC sp_bindrule 'time_rule','type_time'
CREATE TABLE SSSSS(SID INT NOT NULL IDENTITY PRIMARY KEY,Times type_time)
insert into SSSSS values('2001-02-03')
exec sp_addtype type_zip ,'char(6)','not null'
exec sp_bindrule 'rule_zip' ,'type_zip','futureonly'
exec sp_addtype N'spbh',N'char(8)',N'NOT NULL'
--建立規則,保證自定義類型的長度
CREATE RULE RULE_spbh AS
len(@spbh)=8 --隻能是8位
and @spbh not like '%[^0-9]' --隻能包含數字
go
--将規則綁定到自定義資料類型
exec sp_bindrule N'RULE_spbh',N'spbh'
go
--建立表
Create table kkkkkkkkk(
spbh spbh,
spmc varchar(20) not null,
spgg varchar(20) not null,
splx varchar(20) not null,
pfdj numeric(7,2) not null,
kcsl int default(0) not null)
go
其中我想讓spbh為自增列
--用自定義函數
--建立自定義
create function f_nid()
returns char(8)
as
begin
return(right(100000001+isnull((select max(spbh) from kcgl),0),8))
end
go
--建表語句改為:
Create table kkkkk2(
spbh spbh default dbo.f_nid(),
spmc varchar(20) not null,
spgg varchar(20) not null,
splx varchar(20) not null,
pfdj numeric(7,2) not null,
kcsl int default(0) not null)
--插入記錄時使用:
insert kcgl(spmc,...kcsl) values('ff',...5)
select BuyTime,cast(DATEPART(yy,BuyTime) as varchar(4))+'-'+cast(DATEPART(m,BuyTime)
as varchar(2))+'-'+cast(DATEPART(d,BuyTime) as varchar(2)) as 'Time' from aa22
DECLARE @str_today char(10)
SET @str_today=replace(Convert(char(10),getdate(),120),'-','.')
print @str_today
Select GetDate()
Select Convert(varchar(12),GetDate(),112)
create table aaaaa(a varchar(20),b varchar(20),c varchar(20))
insert into aaaaa values ('1','1',null)
insert into aaaaa values ('2','3','無')
insert into aaaaa values ('3','5','無')
select object_id('aaaaa')
declare @ColName varchar(20)
declare @s nvarchar(200)
set @s=''
DECLARE Detail_Cursor Cursor Fast_Forward For
select Name from syscolumns where id=object_id('aaaaa')
OPEN Detail_Cursor
FETCH Next From Detail_Cursor Into @ColName
WHILE @@fetch_Status=0
BEGIN
exec('select top 1 * from aaaaa where '[email protected]+' is not null and '[email protected]+' <>''無''')
if @@RowCount>0
set @[email protected]+','[email protected]
FETCH Next From Detail_Cursor Into @ColName
END
CLOSE Detail_Cursor
DEALLOCATE Detail_Cursor
print @s
set @s='select '+stuff(@s,1,1,'') +' from aaaaa'
exec (@s)
select IDENTITY(int,1,1) as tid , * into #t1 from employee
select * from #t1 where tid>=5 and tid<=25
drop table #t1
CREATE RULE time_rule AS
@time like 'yyyy-mm-dd' or len(@time)=0