A. sqlserver感觉比Access容易注入
不对,access数据库安全性更差。同时数据库位置如果被别人知道,还有被下载的危险。
sqlserver你所说的这种注入,局限于sql2000与asp结合的页面,这是由于编写者在页面中没有进行安全检测,或者是页面连接数据库给了写权限之类马虎大意造成的。
如果你用sqlserver2005,或者asp.net来编写页面,这样的注入完全可以避免。
sql是专业做数据库的,怎么可能比microsoft access这种为了兼容windows而事实而非的数据库更危险呢!
B. sqlserver 按分隔符截取字符串
可以参考下面的代码:
selectsubstring('ADFASDFD(DASFADSFAS)',1,charindex('(','ADFASDFD(DASFADSFAS)')-1)
主要用到两个函数,一个charindex,这个是判断指定字符位置的函数。
另一个是substring,这个是截取字符串的函数。
(2)sqlserver分号扩展阅读:
sqlserver参考函数
upper(char_expr) 转为大写
lower(char_expr) 转为小写
space(int_expr) 生成int_expr个空格
reverse(char_expr) 反转字符串
stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从
C. Sqlserver怎么求一个数占总数的百分之几
select 12/23 * 100 ||'%' from al;
mysql 服务器支持 # 到该行结束、-- 到该行结束 以及 /* 行中间或多个行 */ 的注释方格:
mysql> SELECT 1+1; # 这个注释直到该行结束
mysql> SELECT 1+1; -- 这个注释直到该行结束
mysql> SELECT 1 /* 这是一个在行中间的注释 */ + 1;
mysql> SELECT 1+
/*
这是一个
多行注释的形式
*/
1;
注意 -- (双长划) 注释风格要求在两个长划后至少有一个空格!
尽管服务器理解刚才描述的注释句法,但 MySQL 客户端的语法分析在 /* ... */ 注释方式上还有所限止:
单引号和双引号被用来标志一个被引用字符串的开始,即使是在一个注释中。如果注释中的引号没有另一个引号与之配对,那和语法分析程序就不会认为注释结束。如果你以交互式运行 mysql,你会产生困惑,因为提示符从 mysql> 变为 '> 或 ">。
一个分号被用于指出当前 SQL 语句的结束并且跟随它的任何东西表示下一行的开始。
不论你是以交互式运行 mysql 还是将命令放在一个文件中,然后以 mysql < some-file 告诉 mysql 读取它的输入,这个限制均存在。
D. sqlserver怎么把一个表中按分号隔开的字符串分成多行放在一个临时表中呢
分割“版区负责人Id”,使其结果为
版区Id版区负责人Id
6123
6456
6789
(这里,我想来想去,只有使用零时表+游标来实现,个人没有想到更好的方法)
CREATEFUNCTION[dbo].[fun_Split]
(
@strVARCHAR(MAX),
@splitVARCHAR(10)
)
RETURNSTABLE
AS
RETURN
(SELECTB.idFROM(SELECT[value]=CONVERT(XML,'<v>'+REPLACE(@str,@split,'</v><v>')
+'</v>')
)A
OUTERAPPLY(SELECTid=N.v.value('.','varchar(100)')
FROMA.[value].nodes('/v')N(v)
)B
)
GO
--2005以及以上的版本支持这种分割写法。用xml path,把数据搞成你所要的结果
E. sqlserver with 语法
一.sqlserver with as的含义
WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。
特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个TEMP表里,如果只是被调用一次,则不会。而提示materialize则是强制将WITH AS短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。
二.使用方法
先看下面一个嵌套的查询语句:
select * from person.StateProvince where CountryRegionCode in
(select CountryRegionCode from person.CountryRegion where Name like 'C%')
declare @t table(CountryRegionCode nvarchar(3))
insert into @t(CountryRegionCode) (select CountryRegionCode from person.CountryRegion where Name like 'C%')
select * from person.StateProvince where CountryRegionCode
in (select * from @t)
F. 连接SqlServer字符串出错(在线等)
少了一个分号,server=mySQLServer后应当跟一个分号。
如下:
string strConnection = "server=mySQLServer;";
strConnection += "database=ztx;uid=sa;password=wxj;";
G. SQLSERVER 变量赋值
set @login_id_csv = ('aa', 'bb', 'cc')
试试加上引号
set @login_id_csv = ‘('aa', 'bb', 'cc') ’
还不行的话看看你是什么数据库 有的数据库执行sql需要在后边加分号
http://technet.microsoft.com/zh-cn/ms188927.aspx
还不行的话你可以参考这里 有讲declare的用法
H. SQLSERVER EXEC参数的问题
其实就是对同名称的存储过程加一个区分,但是又可以使用同一个名称来删除。
形象的说就是一个存储过程有两个版本。
I. microsoft sql server2005 中在完成SQL语句时,需要写分号吗如果不写分号可以执行多条语句吗
可以写分号 也可以不写 ,建议养成习惯 写 go 比较好些
写不写 都可以执行 ,但是如果对统一表进行操作容易出问题 最好写go
J. sql实现字符串分割截取,以分号做标致位。
你的数据库是什么数据库?
sqlserver?oracle?
下面这个是db2的,简单改一下sqlserver应该就能用:
http://hi..com/micro0369/item/cac396e8c99fc5e9fb42ba5e
找到一个sqlserver的:
http://blog.csdn.net/xiaoyuan402/article/details/7049473