declare @sql varchar(8000)
set @sql='select '
select @sql=md002+' as '+md003+',' from admmd where md001=epstb
set @sql=substring(@sql,1,len(@sql)-1)+ ' from epstb'
exec(@sql)
set @sql='select '
select @sql=md002+' as '+md003+',' from admmd where md001=epstb
set @sql=substring(@sql,1,len(@sql)-1)+ ' from epstb'
exec(@sql)
set @sql='select '
select @sql=@sql+md002+' as '+md003+',' from admmd where md001=epstb --改一下
set @sql=substring(@sql,1,len(@sql)-1)+ ' from epstb'
exec(@sql)
--用动态语句
declare @s varchar(8000)
set @s=''
select @s=@s+',['+MD003+']=['+MD002+']'
from ADMMD
where MD001='EPSTB'
set @s=stuff(@s,1,1,'')
exec('select '+@s+' from EPSTB')
大家帮我看看这个帖
--****检查函数是否存在
if exists(select 1 from sysobjects where id=object_id(N'[dbo].[FieldCast]')
and xtype in (N'FN',N'IF',N'TF'))
drop function FieldCast
gocreate function FieldCast(@str char(20))
returns varchar(8000)
as
begin
declare @Result varchar(8000)
set @Result=''
select @Result=@Result+',['+rtrim(MD004)+']=['+rtrim(MD003)+']'
from DSCSYS..ADMMD
where MD001='EPSTB'
set @Result=stuff(@Result,1,1,'')
return(@Result)
end
go但是执行语句:
exec ( 'select '+dbo.FieldCast('TB001')+' from EPSTB')
的时候提示'dbo' 附近有语法错误。但用PRINT显示出来SQL应该没问题
print 'select '+dbo.FieldCast('TB001')+' from EPSTB'select [通知单别]=[TB001],[通知单号]=[TB002],.... from EPSTB
控制流语句。
DECLARE 语句,该语句定义函数局部的数据变量和游标。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
EXECUTE 语句调用扩展存储过程。
set @str='select '+dbo.FieldCast('TB001')+' from EPSTB'
exec(@str)
--****检查存储过程是否存在
if exists(select 1 from sysobjects where id=object_id(N'[dbo].[FieldCast]')
and xtype = 'P')
drop procedure FieldCast
gocreate procedure FieldCast
@str char(20),
@param varchar(8000)
with ENCRYPTION
as
begin
declare @sqlstr varchar(8000)
declare @sql varchar(8000)
set @sqlstr=''
select @sqlstr=@sqlstr+',['+rtrim(MD004)+']=['+rtrim(MD003)+']'
from DSCSYS..ADMMD
where MD001=@str
set @sqlstr=stuff(@sqlstr,1,1,'')
set @sqlstr='select '+@sqlstr+' from '+@str+' where 1=1 '+ @param
exec (@sqlstr)
end
go
直接的拼SQL文的。