采用sp_executesql动态执行sql语句,并输入参数和输出返回值


摘要:
下文中主要通过 sp_executesql 获取sql执行后的返回值的方法分享


以前我们执行sql语句,都采用exec (@sql)的方法,进行执行,exec 同sp_executesql执行sql语句,有以下的缺点:

1.exec 容易产生sql注入错误;
2.exec执行sql语句,无法获取sql执行的返回值,因为exec 执行后内存中的定义的变量会随着exec执行完毕而消失
动态返回值,可以实时获取表中的数据,返回表数据的一种方法;
3.exec执行sql语句,无缓存执行计划,效率低下;

例:

CREATE TABLE #test(keyId INT NOT NULL,qty DECIMAL(12,2),jinE DECIMAL(12,2));  
INSERT INTO #test(keyId,qty,jinE) VALUES(8,88.9,36.9);  
INSERT INTO #test(keyId,qty,jinE) VALUES(88,99.2,46.9);  
 ----------------------------------------- 
DECLARE @sql NVARCHAR(2000) = N'SELECT @qty=qty,@jinE=jinE FROM #test WHERE keyId=@keyId;';  
DECLARE @InputList NVARCHAR(500) = N'@keyId INT,@qty DECIMAL(12,2) OUTPUT,@jinE DECIMAL(12,2) OUTPUT';  
DECLARE @keyId_ INT,@qty_ DECIMAL(12,2),@jinE_ DECIMAL(12,2);  
------------------------------------------  
SET @keyId = 8;   
EXEC sp_executesql @sql,@InputList,@keyId=@keyId_,@qty=@qty_ OUTPUT,@jinE=@jinE_ OUTPUT;  
SELECT @qty,@jinE;  
------------------------------------------
DROP TABLE #test;