上面的存储过程返回的数据,字段和上面的查询相同,上面一条sql是在程序中固定的语句,我无法修改,但是我可以在后面写sql语句,通过union将语句连接 因为在用unoin的时候只支持select语句,所以我建立一个存储过程用来获取该表的字段,拼接sql语句,使其字段和上面的相同,但现在又出现问题,存储过程如何和语句通过union连接? 注意前提是select * from a此条不可修改,可以在后面追加条件
程序里面只支持union后面加语句达到我要的效果,程序属于第三方开发,无源码,无法修改
所用数据库是sql 2008 r2
存储过程代码
alter proc zjsj --存储过程 @content varchar(30) --接收部门编号 as declare @sql varchar(2000) --存储拼接的sql语句 declare @name1 varchar(2000)--接收拼接的字段 declare Test_Cursor Cursor scroll for --创建游标 select name from syscolumns where id=object_id(N'a') open Test_Cursor declare @name varchar(1000) fetch next from Test_Cursor into @name set @name1 = @name while @@fetch_status = 0 begin fetch next from Test_Cursor into @name set @name1 = @name1 + ',' + @name --通过游标和循环将所有字段查询拼接出来 end set @sql = 'select ' + @name1 + ' from b' close Test_Cursor deallocate Test_Cursor if(@content like '109%')--根据部门拼接相应条件 begin set @sql = @sql + ' where dept_code not like ''109%'' and (a01 like ''%在职%'' or a01 = ''试用人员'')' end else if (@content not like '109%') begin set @sql = @sql + ' where dept_code not like ''1%''' end exec (@sql) go
------解决方案-------------------- 试试这个:
if OBJECT_ID('tempdb..#temp') is not null drop table #temp
ALTER function [dbo].[ListToInt](@values nvarchar(MAX), @delimiter nvarchar(10)) returns @result table (value int) as begin declare @v as nvarchar(MAX); while charindex(@delimiter,@values) <> 0 begin set @v = substring(@values,1,charindex(@delimiter,@values)-1); if isnumeric(@v)=1 insert into @result values(@v); set @values = substring(@values,charindex(@delimiter,@values)+1,len(@values)); end
if isnumeric(@values)=1 insert into @result values(@values); return; end
应用:
declare @tmp table ( value int )
insert into @tmp values (10);
select * from @tmp union select * from ListToInt('1,2,3',',')