zoukankan      html  css  js  c++  java
  • sql server 获取动态sql输出结果

    不带输出结果 我们一般会这样写

    例子:一个输出6位递增号码结果

    ALTER proc GetCode
    @tb varchar(50),
    @tag varchar(50)
    as
     declare @sqlstring nvarchar(max)
     set @sqlstring='
    SELECT '''+@tag+'''+RIGHT(1000001+ISNULL(RIGHT(MAX(FCode),6),0),6) FROM '+@tb
    
    --print @sqlstring
    exec (@sqlstring)
    
    GO

    但是如果存储过程需要和其他过程继续运算,我需要把结果放到一个变量,这个时候 就需SQL内置 存储过程写法 

    先看看语法:

    sp_executesql [ @stmt = ] stmt [ {, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,...n]' } {, [ @param1 = ] 'value1' [ ,...n ] } ]
    

    然后我们来改造

    (用法解释 : 我们需要把结果放入@temp, 然后 在 sp_executesql 中声名 @temp的类型 后面把output的变量放后面 , 这样 temp 的值就会赋给 outvalue 里面了)

    例子:

    CREATE procedure GetCodeByOut
    @tb varchar(50),
    @tag varchar(50),
    @outvalue  varchar(50) output
    as
    declare 
    @sqls nvarchar(4000) 
    set @sqls='SELECT @temp= '''+@tag+'''+RIGHT(1000001+ISNULL(RIGHT(MAX(FCode),6),0),6)  from '+@tb
    exec sp_executesql @sqls,N'@temp varchar(50) output',@outvalue output 

    调用

    declare @userName varchar(50) 
    exec GetCodeByOut 'T_Car','HB',@userName output
    select @userName 

    如果有多个输出参数 同理依次声名即可

    declare @num int, @sqls nvarchar(4000) ,@sname char(10)
    set @sqls='select @a=sno,@b=sname from aa '
    exec sp_executesql @sqls,N'@a int output,@b char(10) output',@num output,@sname output
    select @num
    select @sname

    参考文章:

    https://blog.csdn.net/lin00kun11/article/details/50535643

  • 相关阅读:
    【.NET】Web Service
    【Coding】C# 操作文件(一)
    【设计模式】设计模式概述
    TCP/IP协议
    【.NET】SOAP Web Service
    简单读写xml
    利用winform来承载WCF服务
    在panel里面显示一个窗体
    asp.net 角色管理 MSDN帮助路径
    asp.net ajax MSDN帮助
  • 原文地址:https://www.cnblogs.com/linyijia/p/9895534.html
Copyright © 2011-2022 走看看