SQL基本使用和代码优化
EXEC和sp_executesql的区别?
DBCC FREEPROCCACHE --》清空缓存中的执行计划
SELECT cacheobjtype,objtype,usecounts,sql from sys.syscacheobjects WHERE sql NOT LIKE '%cach%' AND sql NOT LIKE '%sys.%' --》查找对应的缓存中的对应计划
SQL Server为每一个的查询字符串创建新的执行计划,即使查询模式相同也是这样
EXEC除了不支持动态批处理中的输入参数外,他也不支持输出参数
用法:
Exec('select * from CustInfo')
Exec sp_executesql N'select * from CustInfo'
declare @paraName varchar(20)
set @paraName='CustName'
Exec('select '+@paraName+' from CustInfo')--加号前后加上空格
如果你要把输出返回给调用批处理中的变量:
DECLARE @sql NVARCHAR(MAX),@RecordCount INT
SET @sql = 'SELECT COUNT(ORDERID) from Orders';
CREATE TABLE #T(TID INT);
INSERT INTO #T EXEC(@sql);
SET @RecordCount = (SELECT TID from #T)
SELECT @RecordCount
DROP TABLE #T
sp_executesql命令在SQL Server中引入的比EXEC命令晚一些,它主要为重用执行计划提供更好的支持。
它的构成包括:代码快,参数声明部分,参数赋值部分
EXEC sp_executesql
@stmt = <statement>,--类似存储过程主体
@params = <params>, --类似存储过程参数部分
<params assignment> --类似存储过程调用
@stmt参数是输入的动态批处理,它可以引入输入参数或输出参数,和存储过程的主体语句一样,只不过它是动态的,而存储过程是静态的,不过你也可以在存储过程中使用sp_executesql;
@params参数与定义输入/输出参数的存储过程头类似,实际上和存储过程头的语法完全一样;
@<params assignment> 与调用存储过程的EXEC部分类似。
用法:
declare @paraName varchar(20)
set @paraName='CustName'
declare @temp nvarchar(1000)
set @temp='select ' +@paraName+ ' from CustInfo'
Exec(@temp)
exec sp_executesql @temp--因为 sp_executesql只能执行的类型为ntext/nchar/nvarchar,所以@temp需要从varchar改为nvarchar
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT;
SET @TableName = 'CustInfo ';
SET @OrderID = 10;
SET @sql = 'SELECT * from '+QUOTENAME(@TableName) + ' WHER
相关文档:
基本的Sql编写注意事项
尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。
不用NOT IN操作符,可以用NOT EXISTS或者外连接+替代。
Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOT EXISTS比NOT IN效率 ......
现象:
用VS 2008打开VS 2005开发的报表后,会把报表单向升级到2008的shcema,不能再转回2005的schema.再发布到SQL Server 2005上时会报错:"无法升级的名称空间".
找到的解决办法:
在SQL Server 2005所在的机器上开发报表.
把SQL Server升级到 SQL Server 2008.
据说有Reporting Service 2008的单独安装版,可以 ......
PL/SQL Developer使用技巧
1、PL/SQL Developer记住登陆密码
在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码;
设置方法:PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History , "Store history"是默认勾选的,勾上"Store wi ......
SQL 中的主键的作用:
能够唯一表示数据表中的每个记录的【字段】或者【字段】的组合就称为主码(主键)。
作用
1、主键唯一的识别每一记录;
2、主键将记录和存放在其他表中的数据进行关联。在这一点上,主键是不同表中各记录之间的简单指针。
若有两个表A,B,key是A的主键,而B中也有key字段,则key就是表B的外键。
A ......