【SQL Server】将EXEC的变量结果赋值输出
动态传入表名和表的某些属性,然后将标的属性赋值到参数中,以便后续使用。
首先一张表(表和字段设计略),使用动态的语句如下:
1 DECLARE @tablename VARCHAR(255) = 'BomNo' 2 ,@id INT = 1 3 ,@sql NVARCHAR(MAX) ; 4 SET @sql ='SELECT fnumber,sonFnumber FROM BomNo WHERE id = ' + CONVERT(varchar,@id) 5 EXEC(@sql)
执行T-SQL 语句,结果如下:
如果,我们希望把输出的 fnumber 和 sonFnumber 作为参数,应该怎么做?这时候就涉及到了系统函数sp_executesql。
DECLARE @tablename VARCHAR(255) = 'BomNo' ,@id INT = 1 ,@sql NVARCHAR(MAX) -- 如果定义执行语句类型为VARCHAR,会报错:过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@statement' ,@nparam NVARCHAR(1000) = N' @fnumber VARCHAR(255) OUTPUT,@sonfnumber VARCHAR(255) OUTPUT'; DECLARE @fnumber VARCHAR(255),@sonfnumber VARCHAR(255) SET @sql ='SELECT @fnumber= fnumber,@sonFnumber=sonFnumber FROM BomNo WHERE id = ' + CONVERT(varchar,@id) EXEC sys.sp_executesql @sql, @nparam, @fnumber OUTPUT, @sonfnumber OUTPUT -- 传递到参数的值 SELECT @fnumber fnumber, @sonfnumber sonfnumber
可以发现,参数已经赋值。
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。