在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可。
而今天的一个存储过程却需要获取动态SQL的查询结果。
需求描述:在某表中根据Id值查询Cost值(表名不确定但表结构确定,如下面的Product表)
如果不考虑获取返回值,我们这样写即可:
要获取返回值首先尝试的是下面两个方法:
以上两种方法均会报错,求助万能的网络发现一个可爱的函数--sp_executesql可以满足我们的要求:
不仅能获取返回值,还能传参有没有!只可惜表名依然需要拼接在SQL语句中。
注意:@sql的类型需要是'ntext/nchar/nvarchar'这三种之一。