create function fun()
returns varchar(30)
as
begin
return 'f_field1,f_field2'
end如果执行select f_field0,dbo.fun() from tb_table
能够像执行select f_field0,f_field1,f_field2 from tb_table这样的效果,说明白了,就是这些列名能够做成动态的,劳驾各路大侠指点
returns varchar(30)
as
begin
return 'f_field1,f_field2'
end如果执行select f_field0,dbo.fun() from tb_table
能够像执行select f_field0,f_field1,f_field2 from tb_table这样的效果,说明白了,就是这些列名能够做成动态的,劳驾各路大侠指点
动态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
declare @sql varchar(100)set @sql='select f_field0,f_field1,f_field2 from tb_table'exec (@sql)
returns varchar(30)
as
begin
return 'f_field1,f_field2'
end
--构建动态语句来完成
declare @sql varchar(8000)
select @sql='select f_field0,'+dbo.fun()+' from tb_table'
exec(@sql)
returns varchar(100)
as
begin
declare @f_field1 varchar(20)
declare @f_field2 varchar(20)
select @f_field1=f_field1,@f_field2=f_field2 from tb_table where f_field0=@f_field0
return ','+@f_field1+','+@f_field2
end--执行
select f_field0,dbo.fun(f_field0) from tb_table
as
select f_field0,f_field1,f_field2
from tb_table
where f_field0=@f_field0
set @vColString='col1,col2,col3'
exec('select '+@vColString+' from tableName')
returns varchar(100)
as
begin
declare @f_field1 varchar(20)
declare @f_field2 varchar(20)
select @f_field1=f_field1,@f_field2=f_field2 from tb_table where f_field0=@f_field0
return ','+@f_field1+','+@f_field2
end--执行
select f_field0,dbo.fun(f_field0) from tb_table-------------------------------------------------------
就是上面沙果的效果再进一步处理一下,沙果是把这两列合在一起显示了,我的需要是在执行语句里dbo.fun(f_field0)能够分开几列来显示,谁有办法
第一个函数返回f_field1,第二个函数返回f_field2,不就OK了?
返回代码 = 0请问这个警告是什么意思?还有返回代码0表示什么,是不是表示成功了
至于返回代码=0,是哪里的信息?
把你代码贴出来看看
-_-
(@var1 as int,
@var2 as int output)
as
begin
set @var2=1000
return 0
enddeclare @YourVar1 int
declare @YourVar2 int
set @YourVar1=1
set @YourVar2=1
exec PrTest @YourVar1,@YourVar2
--exec PrTest @YourVar1,@YourVar2 output
select @YourVar2输出结果
1
若exec PrTest @YourVar1,@YourVar2 output
则输出结果
1000
辅助表中,如下:
create procedure proc1
as
begin
create table #t(...) --表结构同被调用存储过程返回结果集的结构 insert #t exec proc2 select * from #t left join table on ...
end
go2。还有一个方面就是用openrowset(不过就是速度不怎么样)
select * from openrowset('sqloledb'
,'Trusted_Connection=yes'
,'exec sp_who') -- 这里是你要调用的存储过程