RETURNS varchar(2000)
AS
BEGIN
declare @sql varchar(8000)
declare @WBSDate varchar(100)
select @WBSDate=@BB from mainview where CODE=@AA
return @WBSDate
END
这样写如果 select dbo.GetWBSDate('aaa','abc') 返回的结果是...字段名 'abc' 而不是值。。
14 个解决方案
#1
select @WBSDate=@BB from mainview where CODE=@AA
你把@BB赋值给@WBSDate当然就是'abc'
应该
select @WBSDate=列名 from mainview where CODE=@AA
你把@BB赋值给@WBSDate当然就是'abc'
应该
select @WBSDate=列名 from mainview where CODE=@AA
#2
,@BB varchar(100)可以省去
#3
我的列名想赋值为变量
比如 select @BB from mainview where CODE=@AA
然后把搜索出来的值 返回给@WBSDate
比如 select @BB from mainview where CODE=@AA
然后把搜索出来的值 返回给@WBSDate
#4
去看看表值函数..
#5
@BB是列名?动态的取哪一列吗,那就得动态的sql了
#7
@BB是列名...动态取某列的值,如何在函数中写。。
#8
用存储过程吧,函数不支持exec来执行动态的sql
#9
这。。。问题就麻烦了,你还得判断传入的字符串对不对,或者不存在此列名之类的。。
#10
恩..那暂且列名是一定存在。。这个变量如何写呢。
#11
--> 数据库版本:
--> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
--> 测试数据:表A
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'表A')
AND type in (N'U'))
DROP TABLE 表A
GO
---->建表
create table 表A([Department] int,[Mode] varchar(1))
insert 表A
select 1,'a' union all
select 1,'b' union all
select 1,'c' union all
select 2,'a' union all
select 2,'a'
GO
declare @aa varchar(200)='1' ,@bb varchar(200) ='[Mode]'
declare @sql varchar(4000)
set @sql = 'select '+@bb + ' from 表A where Department = '+@aa
exec (@sql)
--> 查询结果
SELECT * FROM 表A
--> 删除表格
--DROP TABLE 表A
#12
函数中不能写 exec 吧。。
#13
有那么复杂?那就要用到EXEC了,不过没见过那么复杂的,呵呵。
你可以用case when THEN end;中间来灵活处理一下下。。。
#14
使用exec 执行动态SQL
要返回值 得用output,sp_executesql
要返回值 得用output,sp_executesql
declare @i int
declare @aa varchar(200)='1' ,@bb varchar(200) ='[Mode]'
declare @sql varchar(4000)
set @sql = 'select @bb ' into @i from 表A where Department = '+@aa
--exec (@sql)
exec sp_executesql @sql,N' @bb varchar(20),@i int',@bb='[Mode]',@i output
#1
select @WBSDate=@BB from mainview where CODE=@AA
你把@BB赋值给@WBSDate当然就是'abc'
应该
select @WBSDate=列名 from mainview where CODE=@AA
你把@BB赋值给@WBSDate当然就是'abc'
应该
select @WBSDate=列名 from mainview where CODE=@AA
#2
,@BB varchar(100)可以省去
#3
我的列名想赋值为变量
比如 select @BB from mainview where CODE=@AA
然后把搜索出来的值 返回给@WBSDate
比如 select @BB from mainview where CODE=@AA
然后把搜索出来的值 返回给@WBSDate
#4
去看看表值函数..
#5
@BB是列名?动态的取哪一列吗,那就得动态的sql了
#6
#7
@BB是列名...动态取某列的值,如何在函数中写。。
#8
用存储过程吧,函数不支持exec来执行动态的sql
#9
这。。。问题就麻烦了,你还得判断传入的字符串对不对,或者不存在此列名之类的。。
#10
恩..那暂且列名是一定存在。。这个变量如何写呢。
#11
--> 数据库版本:
--> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
--> 测试数据:表A
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'表A')
AND type in (N'U'))
DROP TABLE 表A
GO
---->建表
create table 表A([Department] int,[Mode] varchar(1))
insert 表A
select 1,'a' union all
select 1,'b' union all
select 1,'c' union all
select 2,'a' union all
select 2,'a'
GO
declare @aa varchar(200)='1' ,@bb varchar(200) ='[Mode]'
declare @sql varchar(4000)
set @sql = 'select '+@bb + ' from 表A where Department = '+@aa
exec (@sql)
--> 查询结果
SELECT * FROM 表A
--> 删除表格
--DROP TABLE 表A
#12
函数中不能写 exec 吧。。
#13
有那么复杂?那就要用到EXEC了,不过没见过那么复杂的,呵呵。
你可以用case when THEN end;中间来灵活处理一下下。。。
#14
使用exec 执行动态SQL
要返回值 得用output,sp_executesql
要返回值 得用output,sp_executesql
declare @i int
declare @aa varchar(200)='1' ,@bb varchar(200) ='[Mode]'
declare @sql varchar(4000)
set @sql = 'select @bb ' into @i from 表A where Department = '+@aa
--exec (@sql)
exec sp_executesql @sql,N' @bb varchar(20),@i int',@bb='[Mode]',@i output