存储过程中执行动态sql语句
存储过程中执行动态sql语句 MSSQL提供了两种方式:exec和sp_executesql 通常后者更有优势,提供了输入输出接口,而exec没有 sp_executesql的最大优点是能够重用执行计划,大大提高了执行性能,所以尽量使用sp_executesql,它也更灵活 1 exec的使用 exec有两种用法:执行一个存储过程,另一种是执行一个动态的批处理 EXEC括号中只允许包含一个字符串变量,但是可以串联多个变量,例如: XEC('SELECT TOP('+ CAST(@TopCount AS VARCHAR(10)) +')* FROM '+ QUOTENAME(@TableName) +' ORDER BY ORDERID DESC'); 这样编译器会报错,编译不通过 但可以这样:EXEC(@sql+@sql2+@sql3);编译就会通过 最好的办法就是把代码构造到一个变量中,然后再把该变量作为exec命名的输入参数 exec的缺点是不能执行一个包含一个带有变量的批处理 例如: DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT; SET @TableName = 'Orders'; SET @OrderID = 10251; SET @sql = 'SELECT * FROM