假设有一个财务sql表[id,sql],sql是一个sql语句,是一个计算财务合计值的语句,我想写一个存储过程,通过调用财务sql表,能够返回一个一列多行的数据集?可行吗?如何写?伪代码也行,刚接触存储过程,多谢!

解决方案 »

  1.   


    动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  2.   

    create proc test
    (@id int)
    as
    begin
    declare @sql varchar(4000)
    select @sql=sql from 表 where id=@id
    exec(@sql)
    end当然,要确保你保存在SQL字段的语句是正确的.
      

  3.   

    看了,输出参数是一个,但是财务sql表[id,sql]是多条记录,如何返回所有的值,循环吗?
      

  4.   

    fcuandy  你的我测试了,可以,但是财务sql表[id,sql]是多条记录,如何返回所有的值,循环吗?
      

  5.   

    1.既然表中的列内容为一个SQL语句,你可以将这条语句也完整来达到自己的目的
      在需要生成特定的报表时,只需要查询到这条语句就可以2.如果一条语句无法实现,可以利用UNION ALL将两条或多条语句的结果连接起来
     例如:
     Declare @sql varchar(1000)
      Select @sql=''
      Select @sql=@sql + ' UNION ALL ' + SQL From 表名 Where 条件过滤
      exec(@SQL)3.或者利用游标来实现一条一条语句来执行操作
      游标的写法可以参考SQL Server的联机帮助来做
     
      

  6.   

    对,用大家所说的EXEC先组成动态SQL语句,再exec(SQL语句)
      

  7.   

    LZ,你可以用SQL里的函数来实现,给个例子你看看就知道了
    CREATE function F_KCSL (@RQ1 DATETIME,@RQ2 DATETIME) --括号里为参数 这个函数返回的是一个表@LSBW
    returns @LSBW table (SPIDH INTEGER,spmc varchar(50),spbm varchar(20),DW VARCHAR(20),SL NUMERIC(10,2),JSL NUMERIC(10,2),QCKC NUMERIC(10,2),XYKC NUMERIC(10,2),QCDJ NUMERIC(10,4),JCDJ NUMERIC(10,4))         
    AS  
    BEGIN 
         --对表的操作
         RETURN
    END
    在查询分析器中直接写SELECT * FROM F_KCSL(参数) 即可
      

  8.   

    函数只能返回SQL语句,不能对表直接操作吧