ALTER function [dbo].[split]
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
returns @temp table(F1 varchar(100))
as
begin
declare @i int
set @SourceSql = rtrim(ltrim(@SourceSql))
set @i = charindex(@StrSeprate,@SourceSql)
while @i >= 1
begin
if len(left(@SourceSql,@i-1))>0
begin
insert @temp values(left(@SourceSql,@i-1))
end
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql <> ''
insert @temp values(@SourceSql)
return
end
----------------------------------------
//应用
--开始迭代分割出来的参数
declare @str nvarchar(10)
declare auth_cur cursor for select F1 from split(要分割的参数,'分隔符')
open auth_cur
fetch next from auth_cur into @str
while ( @@fetch_status = 0 )
begin
//做处理
end
close auth_cur
deallocate auth_cur
......
1. SQL行转列代码
-
-
表里面有这么一组数据:
code price
'MCU0-3' 15
'MCU0-3' 20
'MCU0-3' 22
'MCU3-15' 17
'MCU3-15' 16
'MCU3-15' -10
'MCU3-15' 50
'MCU3-27' 99
'MCU3-27' 96
'MCU3-27' 54
'MCU3-27' 14
'MCU3-27' 46
'MCU3-27' 86
现在需要得到这样的结果:
MCU0-3 MCU3-15 MCU3-27
15 17 99
20 16& ......
SQL注入就不用介绍了,网上很多。下面介绍一下防止
SQL注入的方法。
使用
quotename 函数和
sp_executesql
参考如
下表结构:这是一个文档表里面有一些简单的字段信息
CREATE
TABLE
[dbo]
.
[DocumentInfo]
(
[ID]
[int]
IDENTITY
(
1,
1) primary key
NOT
NULL,--
主键
[Name]
[varchar]
(
100)
NOT
NULL,--
文档名字
[FunctionID]
[int]
NOT
NULL
,
--
功能
ID
外键
[TypeInfo]
[nvarchar]
(
2000)
NULL—
描述信息
)
我们可能会按,主键
ID,文档的名字,功能
id,
描述信息进行查询
,这个一看就是拼接
sql语句,如果不用上面的方法很可能造成
sql注入
例如你写的存储过程可能如下:
CREATE
proc
[dbo]
.
[Doc_search]
(
@ID
int
,
@name
varchar
(
10),
@FID
int
,
@Info
nvarchar
(
20)
)
as
begin
declare
@sql
varchar
(
300)
set
@sql
=
'select * from
[DocumentInfo] where 1=1'
if
@ID
<>-
1
set
@sql
=
@sq ......
今天调试服务器,创建了一个新的数据库用户,想给他分配些权限,管理其中的一个数据库。但是等一切都创建好了,却发现他连登陆都没办法登陆。奇怪,dba的角色都给了还是不行。
查看问题,找出解决方案:
企业管理器(2000)或者mangement studio连接你的实例--右键实例--属性--安全性里面看看身份验证模式是否为"sql server and windows", 如果不是, 则改为这个模式。问题得以解决。 ......
使用SQL SERVER2005的时候遇到了中文字符为乱码的情况,经过研究发现,设置SQL的排序规则可以解决这个问题。
1、登录服务器打开Microsoft SQL Server Management Studio。
2、在要修改的数据库上单击鼠标右键,并选择“属性”。
3、在弹出的数据库属性窗口中点击“选择页”中的“选项”。
4、将排序规则由默认的SQL_Latin1_General_CP1_CI_AS修改为Chinese_PRC_CI_AS。
5、点击确定就OK。
varchar修改为nvarchar
char修改为nchar
注:如果无法修改的话,请尝试关闭所有与此数据库的连接,实在不行的话请重启动SQL SERVER服务。 ......
启动数据库邮件功能
sp_configure 'show advanced', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE;
GO
-- 配置数据库邮件
-- 添加邮件账户
execute msdb.dbo.sysmail_add_account_sp
@account_name = '邮箱帐户名(随便取一个,保持和下文一致即可)',
@description = 'mail account for db e-mail.',
@email_address = '你的邮箱地址',
@replyto_address = '你的邮箱地址',
@display_name = '发信时显示的用户名昵称',
@mailserver_name = '邮箱服务器,如smtp.163.com',
@port = 25,
@username = '邮箱的账户',
@password = '邮箱的密码',
@use_default_credentials = 0;
-- 创建数据库邮件配置文件
execute msdb.dbo.sysmail_add_profile_sp
@profile_name = '配置文件名(随便取一个,保持和下文一致即可)',
  ......