采用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;
浙公网安备 33010602011771号