项目中要拼凑几个复杂的SQL语句,需要i所有sql语句要一起执行,所以把拼凑的语句放在一个存储过程,然后把整个拼凑的存储过程输出执行,用exec @sql执行,老是抱错,把拼凑的sql语句输出执行结果是正确的,奇怪了,问题出在哪里呢,尝试了很久没有找到原因,最后无意记得我以前在用过exec (@sql)来执行,结果执行成功,查询了一下,结果发现他们是有区别的:

语法执行存储过程: [ [ EXEC [ UTE ] ] { [ @return_status = ] { procedure_name [ ;number ] | @procedure_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ] [ ,...n ] [ WITH RECOMPILE ]
执行字符串: EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )

即:
不加()是执行存储过程,如果传入SQL串 select a,b,from tbl 就会认为是传入以,分隔的参数。
加(),是执行SQL语句,就先把这整个SQL串进行解析,再执行

posted on 2007-06-27 16:44  blockhead  阅读(616)  评论(0)    收藏  举报