当前位置: 代码迷 >> Sql Server >> 请问关于sql语句标准写法的具体含义,请有功底的高手解答,不想模棱两可
  详细解决方案

请问关于sql语句标准写法的具体含义,请有功底的高手解答,不想模棱两可

热度:77   发布时间:2016-04-24 09:30:26.0
请教关于sql语句标准写法的具体含义,请有功底的高手解答,不想模棱两可
这是一段标准的sql语句

DECLARE @SQL VARCHAR(8000)

SET @SQL='SELECT mai.AccDate AS 日期,mai.Amount AS 金额,mai.code AS 编码

FROM mai'

SET @SQL=@SQL+' WHERE 0=0 '
SET @SQL=@SQL+' AND mai.AccDate=mai.AccDate'

SET @SQL=@SQL+' AND EXISTS(SELECT code FROM UserOrg WHERE code=mai.code AND StaffCode='''+@SysUserCode+''')'

IF @SysOrderSQL<>''
  SET @SQL=@SQL+' ORDER BY '+@SysOrderSQL
ELSE
  SET @SQL=@SQL+' ORDER BY mai.AccDate,mai.Amount,mai.code'

EXEC(@SQL)

1、DECLARE @SQL VARCHAR   这里必须定义变量吗,如果不定义包括下面的变量都不定义发现有也可以实现查询结果,但有什么坏处吗。
2、第二行的SET @SQL=' '为什么要加这段,不加应该也可以实现,他和selcet @sql='' 有什么区别
3、SET @SQL=@SQL+' WHERE 0=0 ' 这段含义是什么,他的作用是什么,不写会如何?
4、看这上面,是不是所有的selcet 都需要set @sql=@sql+'' 或 selcet @sql+''
5、IF @SysOrderSQL<>''
  SET @SQL=@SQL+' ORDER BY '+@SysOrderSQL
  经常看到sql语句结尾会有IF @SysOrderSQL<>'' 为何会加这个?不加似乎也可以,有什么问题?
6、EXEC(@SQL)
  这个是申明变量语句结束对吗
关于上面这些的用法,有好的书可以推荐吗,谢谢!
------解决思路----------------------
1、可以不用定义变量,但那样动态组合sql语句将会很麻烦;
2、可以跟后面的连接一起赋值,跟select @sql=''等价;
3、这种写法是为了方便后面动态组合sql语句,个人不建议这样写,where后面最好从左至右依次放主键、聚簇索引、非聚簇索引等(哪怕现在sql server会优化 where 1=1 and 主键='XXX');
4、不是,可以只用一个set @sql='SELECT mai.AccDate AS 日期,mai.Amount AS 金额,mai.code AS 编码
 
FROM mai  WHERE 0=0   AND mai.AccDate=mai.AccDate  AND EXISTS(SELECT code FROM UserOrg WHERE code=mai.code AND StaffCode='''''
5、目的是判断要不要排序了,不加的话排序将不会按你指定的字段来排序了啊;
6、不是。这个是执行上面动态组合的sql语句
好书推荐邹建大哥的
------解决思路----------------------
1、DECLARE @SQL VARCHAR   这里必须定义变量吗,如果不定义包括下面的变量都不定义发现有也可以实现查询结果,但有什么坏处吗。
可以不需要定义变量,格式化或简化代码量也是变量的作用,对于SQL而言,一但涉及到动态语句就必须得通过变量来实现,但该段代码不属于动态SQL,所以可以不需要定义变量。

2、第二行的SET @SQL=' '为什么要加这段,不加应该也可以实现,他和selcet @sql='' 有什么区别
SET这个时候等同于 SELECT 
3、SET @SQL=@SQL+' WHERE 0=0 ' 这段含义是什么,他的作用是什么,不写会如何?
为后面使用动态的条件做铺垫,比如没有这句语句的话,后面需要传的条件格式就是   ColName='XXX',但往往
我们的SQL语句后面就会有WHERE条件,如果原有的SQL就包含了WHERE条件,那么需要传进来的条件格式就得是 AND ColName='XXX',所以,为了方便后续开发人员的判断语句和写法,一般来说,都会加上无作用的where 条件语句 WHERE 1=1 等等,,,这段写法为开发技巧

4、看这上面,是不是所有的selcet 都需要set @sql=@sql+'' 或 selcet @sql+''
这个就要看需求,一般写这个都是为了凑成一个可执行的SQL语句
5、IF @SysOrderSQL<>''
  SET @SQL=@SQL+' ORDER BY '+@SysOrderSQL
  经常看到sql语句结尾会有IF @SysOrderSQL<>'' 为何会加这个?不加似乎也可以,有什么问题?
@SysOrderSQL变量也是一个参数,为了判断是否需要判续

6、EXEC(@SQL)
  这个是申明变量语句结束对吗
这个是执行上面动态组合的sql语句
  相关解决方案