常用的SQL
1
-----------------------------------------------------------创建数据库2
create database test3
-----------------------------------------------------------选择数据库4
use test5
-----------------------------------------------------------创建表6
create table test7
(8
id int identity(1,1) primary key ,9
test char(50) not null10
)11

12
select * from test13

14
------------------------------------------------------------新增字段名 "wwwwww" 类型 char(10) 15
ALTER TABLE dbo.test ADD16
wwwwww char(10) NULL17

18
------------------------------------------------------------更改字段名 “wwwwww” 为“wttt”19
EXECUTE sp_rename N'dbo.test.wwwwww', N'Tmp_wttt', 'COLUMN'20
EXECUTE sp_rename N'dbo.test.Tmp_wttt', N'wttt', 'COLUMN'21

22
------------------------------------------------------------删除字段各 “wttt”23
Alter table dbo.test drop24
COLUMN wttt25

26
------------------------------------------------------------修改字段类型27
Alter TABLE dbo.test alter column wwwwww nvarchar(255)28

29

30

31
------------------------------------------------------------查找字段中内容,转换字段类型。32
select charindex(str1,str2)33
select left(convert(nvarchar(30),createdatetime,120),10)34
35
/* SQL交叉表实例很简单的一个东西,见网上好多朋友问“怎么实现交叉表?”,以下是我写的一个例子,数据库基于SQL SERVER 2000。36
-- ======================================================37
--交叉表实例38
-- ======================================================39
建表:40
在查询分析器里运行:41
*/42

43
CREATE TABLE [Test] (44
[id] [int] IDENTITY (1, 1) NOT NULL ,45
[name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,46
[subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,47
[Source] [numeric](18, 0) NULL 48
) ON [PRIMARY]49
GO50
INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'语文',60)51
INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'数学',70)52
INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'英语',80)53
INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'数学',75)54
INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'语文',57)55
INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'语文',80)56
INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'英语',100)57
Go58

59
--交叉表语句的实现:60
--用于:交叉表的列数是确定的61

62
select name,sum(case subject when '数学' then source else 0 end) as '数学',63
sum(case subject when '英语' then source else 0 end) as '英语',64
sum(case subject when '语文' then source else 0 end) as '语文' 65
from test 66
group by name67

68
69

70
--用于:交叉表的列数是不确定的71

72
declare @sql varchar(8000)73
set @sql = 'select name,'74

75
select @sql = @sql + 'sum(case subject when '''+subject+''' then source else 0 end) as '''+subject+''','76

77
from (select distinct subject from test) as a78

79
select @sql = left(@sql,len(@sql)-1) + ' from test group by name'80

81
select @sql82
exec(@sql)83

84
go85

86

87
/*-----------------------备份数据库---------------------------------------*/88

89
BACKUP DATABASE [数据库名] TO DISK = N'F:\data\数据库备份' WITH NOINIT , NOUNLOAD , NAME = N'数据库 备份', NOSKIP , STATS = 10, NOFORMAT90

91
declare @filename nvarchar(100) 92
set @filename='E:\DataBase\back\KingCRM2008data'+convert(char(10),getdate(),112) 93
print @filename 94
BACKUP DATABASE [KingCRM2008] TO DISK = @filename WITH NOINIT , NOUNLOAD , NAME = N'KingCRM2008 备份', NOSKIP , STATS = 10, NOFORMAT95

96

97
use pubs98
if exists (select name from sysobjects where name='proc_test_select' and type='p')99
drop PROC proc_test_select100
go 101
create proc proc_test_select102
as103
select * from test104
go105
106
/*----------------------使用带有复杂 SELECT 语句的简单过程------------------------*/107
USE pubs108
IF EXISTS (SELECT name FROM sysobjects 109
WHERE name = 'au_info_all' AND type = 'P')110
DROP PROCEDURE au_info_all111
GO112
CREATE PROCEDURE au_info_all113
AS114
SELECT au_lname, au_fname, title, pub_name115
FROM authors a INNER JOIN titleauthor ta116
ON a.au_id = ta.au_id INNER JOIN titles t117
ON t.title_id = ta.title_id INNER JOIN publishers p118
ON t.pub_id = p.pub_id119
GO120
/* end */ 121
exec au_info_all122

123
/*-----------------------使用带有参数的简单过程 --------------------------------*/124

125
USE pubs126
IF EXISTS (SELECT name FROM sysobjects 127
WHERE name = 'au_info' AND type = 'P')128
DROP PROCEDURE au_info129
GO130
USE pubs131
GO132
CREATE PROCEDURE au_info 133
@lastname varchar(40), 134
@firstname varchar(20) 135
AS 136
SELECT au_lname, au_fname, title, pub_name137
FROM authors a INNER JOIN titleauthor ta138
ON a.au_id = ta.au_id INNER JOIN titles t139
ON t.title_id = ta.title_id INNER JOIN publishers p140
ON t.pub_id = p.pub_id141
WHERE au_fname = @firstname142
AND au_lname = @lastname143
GO144

145
/*au_info 存储过程可以通过以下方法执行*/146

147
EXECUTE au_info 'Dull', 'Ann'148
-- Or149
EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'150

151
/*--------------------使用带有通配符参数的简单过程----------------------------------*/152

153

154
USE pubs155
IF EXISTS (SELECT name FROM sysobjects 156
WHERE name = 'au_info2' AND type = 'P')157
DROP PROCEDURE au_info2158
GO159
USE pubs160
GO161
CREATE PROCEDURE au_info2162
@lastname varchar(30) = 'D%',163
@firstname varchar(18) = '%'164
AS 165
SELECT au_lname, au_fname, title, pub_name166
FROM authors a INNER JOIN titleauthor ta167
ON a.au_id = ta.au_id INNER JOIN titles t168
ON t.title_id = ta.title_id INNER JOIN publishers p169
ON t.pub_id = p.pub_id170
WHERE au_fname LIKE @firstname171
AND au_lname LIKE @lastname172
GO173

174
/*--------------au_info2 存储过程可以用多种组合执行。下面只列出了部分组合:-----------*/175

176
EXECUTE au_info2177
-- Or178
EXECUTE au_info2 'Wh%'179

180
/*---------------------使用 OUTPUT 参数--------------------------*/181

182
USE pubs183
GO184
IF EXISTS(SELECT name FROM sysobjects185
WHERE name = 'titles_sum' AND type = 'P')186
DROP PROCEDURE titles_sum187
GO188
USE pubs189
GO190
CREATE PROCEDURE titles_sum @@TITLE varchar(40) = '%', @@SUM money OUTPUT191
AS192
SELECT 'Title Name' = title193
FROM titles 194
WHERE title LIKE @@TITLE 195
SELECT @@SUM = SUM(price)196
FROM titles197
WHERE title LIKE @@TITLE198
GO199
/*---------接下来,将该 OUTPUT 参数用于控制流语言----------*/200
DECLARE @@TOTALCOST money201
EXECUTE titles_sum 'The%', @@TOTALCOST OUTPUT202
IF @@TOTALCOST < 200 203
BEGIN204
PRINT ' '205
PRINT 'All of these titles can be purchased for less than $200.'206
END207
ELSE208
SELECT 'The total cost of these titles is $' 209
+ RTRIM(CAST(@@TOTALCOST AS varchar(20)))210

211
/*---------使用 WITH ENCRYPTION 选项----------*/212
IF EXISTS (SELECT name FROM sysobjects213
WHERE name = 'encrypt_this' AND type = 'P')214
DROP PROCEDURE encrypt_this215
GO216
USE pubs217
GO218
CREATE PROCEDURE encrypt_this219
WITH ENCRYPTION220
AS221
SELECT * 222
FROM authors223
GO224

225
EXEC sp_helptext encrypt_this226

227

228

229
--接下来,选择加密存储过程内容的标识号和文本。230

231
SELECT c.id, c.text 232
FROM syscomments c INNER JOIN sysobjects o233
ON c.id = o.id234
WHERE o.name = 'encrypt_this'235
exec sp_decrypt encrypt_this236

237
/*---------存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)-------------*/238
create PROCEDURE sp_decrypt(@objectName varchar(50))239
AS240
begin241
begin tran242
declare @objectname1 varchar(100),@orgvarbin varbinary(8000)243
declare @sql1 nvarchar(4000),@sql2 nvarchar(4000),@sql3 nvarchar(4000),@sql4 nvarchar(4000),@sql5 nvarchar(4000),@sql6 nvarchar(4000),@sql7 nvarchar(4000),@sql8 nvarchar(4000),@sql9 nvarchar(4000),@sql10 nvarchar(4000) 244
DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)245
declare @i int,@status int,@type varchar(10),@parentid int246
declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int247
select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName)248

249
create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)250
insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectName)251
select @number=max(number) from #temp252
set @k=0253

254
while @k<=@number 255
begin256
if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)257
begin258
if @type='P'259
set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS '260
else 'ALTER PROCEDURE '+ @objectName+' WITH ENCRYPTION AS '261
end)262

263
if @type='TR'264
set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '265

266
if @type='FN' or @type='TF' or @type='IF'267
set @sql1=(case @type when 'TF' then 268
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '269
when 'FN' then270
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'271
when 'IF' then272
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a'273
end)274

275
if @type='V'276
set @sql1='ALTER VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 '277

278
set @q=len(@sql1)279
set @sql1=@sql1+REPLICATE('-',4000-@q)280
select @sql2=REPLICATE('-',4000),@sql3=REPLICATE('-',4000),@sql4=REPLICATE('-',4000),@sql5=REPLICATE('-',4000),@sql6=REPLICATE('-',4000),@sql7=REPLICATE('-',4000),@sql8=REPLICATE('-',4000),@sql9=REPLICATE('-',4000),@sql10=REPLICATE('-',4000)281
exec(@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9+@sql10)282
end283
set @k=@k+1284
end285

286
set @k=0287
while @k<=@number 288
begin289

290
if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)291
begin292
select @colid=max(colid) from #temp where number=@k 293
set @n=1294

295
while @n<=@colid296
begin297
select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n and number=@k298

299
SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)300
if @n=1301
begin302
if @type='P'303
SET @OrigSpText2=(case when @number>1 then 'CREATE PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS '304
else 'CREATE PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '305
end)306

307

308
if @type='FN' or @type='TF' or @type='IF'--刚才有错改一下309
SET @OrigSpText2=(case @type when 'TF' then 310
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '311
when 'FN' then312
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'313
when 'IF' then314
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a'315
end)316

317
if @type='TR'318
set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '319

320
if @type='V'321
set @OrigSpText2='CREATE VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 '322

323
set @q=4000-len(@OrigSpText2)324
set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)325
end326
else327
begin328
SET @OrigSpText2=REPLICATE('-', 4000)329
end330
--start counter331
SET @i=1332
--fill temporary variable333

334
SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))335

336
--loop337
WHILE @i<=datalength(@OrigSpText1)/2338
BEGIN339

340
SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^341
(UNICODE(substring(@OrigSpText2, @i, 1)) ^342
UNICODE(substring(@OrigSpText3, @i, 1)))))343
SET @i=@i+1344
END345
set @orgvarbin=cast(@OrigSpText1 as varbinary(8000))346
set @resultsp=(case when @encrypted=1 347
then @resultsp 348
else convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end)349
end)350
print @resultsp351
--execute( @resultsp)352
set @n=@n+1353

354
end355

356
end357
set @k=@k+1358
end359

360
drop table #temp361
rollback tran362
end363
GO364

365

366
/*----------------------------------------------------------------------------------------*/367
master.dbo.xp_cmdshell 'osql -U sa -P -i e:\KingCRM\setup\setup\sql.sql'368

浙公网安备 33010602011771号