日期:2014-05-18  浏览次数:20464 次

超级郁闷!存储过程中数据库名为动态参数,求教动态SQL!
超级郁闷!存储过程中数据库名为动态参数,求教动态SQL!
参看以下存储过程中的某段代码
SET @SET_SQL=''
SET @SET_SQL=N'SELECT '+ 
'[ZB].[OTHER_CM_INFO],
[ZB].[OTHER_SC_INFO],
[ZB].[COOP_MYCOMP_CODE]'+
' FROM ['+@DB+'].[dbo].[ZB102_COMP_COOPERATION][ZB]'+
' WHERE '+ 
'[ZB].[COMP_CODE]='''+@INP_COMP_CODE+
''' AND '+ '[ZB].[DEPT_CODE]='''+@INP_DEPT_CODE+''''
EXEC SP_EXECUTESQL @SET_SQL,

其中数据库名为变量“@DB”中的值,整段SQL都是拼写到变量@SET_SQL中的。
遇到的问题1:该存储过程调用另外一个存储过程该怎么写?(另外一个存储过程保存的库名也为变量)
  问题2:该存储过程调用另外一个存储过程时,启动参数中包含datetime型或者其他类型时,无法拼写到@SET_SQL中。
  问题3:取得另外一个存储过程的返回值该怎么写?


------解决方案--------------------
1、你要什么样的结果动态拼接即可。
2、如果不是字符串类型的,要转成字符串在拼接:
例如 int 可以用ltrim 转换
datetime 可以用convert(varchar(10),getdate(),120)
可以用cast。
------解决方案--------------------
SQL code


例子1
declare @返回值 varchar(20)
set @返回值 = ''
exec 另一个存储过程 '输入值1','输入值2',@返回值 output
select @返回值

例子2
create table #返回表
(字段1 varchar(20),
字段2 varchar(20))

insert into #返回表
exec 另一个存储过程 '输入值1','输入值2'

select * from #返回表