日期:2014-05-16  浏览次数:20475 次

新人求大神指点下。。。
请问exec和execute有什么区别吗?
为什么要加上exec?
请问有储存过程这方面基础的东西吗?看书看到这里全部都看不懂了
最后print@sqlStr什么意思呢?
------解决方案--------------------
你这是三个问题,之间没啥关联,我分开解释了
请问exec和execute有什么区别吗?
没有分别,EXEC是EXECUTE的简写,就像PROC是PRODUCE的简写一样。是同义词的概念。

为什么要加上exec?
执行存储过程的标准格式是
EXEC 存储过程名 参数1,参数2
如果没有参数,就是
EXEC 存储过程名
SQL SERVER里,执行单一存储过程的时候可以把EXEC也去掉,直接运行:
存储过程名
但如果你要运行多个存储过程,就必须写成
EXEC 存储过程名1
EXEC 存储过程名2
而不能写成
存储过程名1
存储过程名2

最后print@sqlStr什么意思呢?
这是调试动态SQL常用的语句,你要先搞清楚PRINT的意思。
在SSMS里执行
DECLARE @STR VARCHAR(100)
SELECT @STR='ABC
123'
PRINT @STR
看看效果,你就知道PRINT的用处了。
理解了PRINT的用处之后再解释动态SQL。如果你已经对参数有所理解,那你应该会知道参数可以这样用:
DECLARE @ID INT
SELECT *
FROM T1
WHERE ID=@ID
但如果你想变的不是WHERE里的条件而是表名,那不能写成下面这样:
DECLARE @TB VARCHAR(100)
SET @TB='T1'
SELECT *
FROM @TB
你必须要用存储过程,执行一个用参数拼接而成的SQL语句才能达到你想要的效果:
DECLARE @TB VARCHAR(100),@SQL VARCHAR(8000)
SET @TB='T1'
SET @SQL='SELECT * FROM '+@TB
EXEC (@SQL)
这就是动态SQL的用法。当调试上面这个语句时,很多时候你需要检查拼出的SQL语句是否正确,这时就可以用PRINT替代EXEC,来输出拼出的SQL语句而不是语句运行的结果。
DECLARE @TB VARCHAR(100),@SQL VARCHAR(8000)
SET @TB='T1'
SET @SQL='SELECT * FROM '+@TB
--EXEC (@SQL)
PRINT @SQL