如何将字段中存储的字符串执行?

zhjzh_zjz 2006-05-08 11:41:43
比如有一字段birthday中存储有字符串 getdate()

如何在 select birthday from person 中得到getdate() 的执行结果,就是当前日期,而不是getdate() 这个字符串?如果是别的函数或者语句存储在字段中再取出的时候如何让它执行呢?请大虾指教!
...全文
153 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhjzh_zjz 2006-05-23
  • 打赏
  • 举报
回复
那位高手有比较通用一点的解决办法,感激不尽!
brio8425 2006-05-09
  • 打赏
  • 举报
回复
有加了点见识。。呵呵。。谢谢搂住。。
子陌红尘 2006-05-08
  • 打赏
  • 举报
回复
SQL Server没有这样的内置函数,用户定义函数对执行execute有严格的限制,只允许执行扩展存储过程时调用。
zhjzh_zjz 2006-05-08
  • 打赏
  • 举报
回复
那我test表中存储的是

1 a getdate()
2 b userid()
3 c newid()
...

我想得到的结果是:

1 a 2006-05-08(当前日期)
2 b testid(当前用户)
3 c 10 (新ID)
....

有什么好的办法呢?exec只能单独执行阿,这样的情况不知道如何是好
OracleRoob 2006-05-08
  • 打赏
  • 举报
回复
exec('select getdate()')


动态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
子陌红尘 2006-05-08
  • 打赏
  • 举报
回复
exec('select getdate()')
zhjzh_zjz 2006-05-08
  • 打赏
  • 举报
回复
又没有别的办法啊?因为我做的是一个通用的东西,要转换的字符串不是可列举的,用case行不通,是否能直接把中间的字符串执行的结果呢?不知道是否有这样的函数,就像javascript中的Eval函数可以直接执行字符串得结果的。exec在语句中不能执行阿,不知道还有什么好的办法。谢谢
powerking2 2006-05-08
  • 打赏
  • 举报
回复
用 EXEC 函数可以执行 字符串SQL 这就是动态SQL的内容

pengdali 2006-05-08
  • 打赏
  • 举报
回复
exec('getdate()')
可以执行字符串
子陌红尘 2006-05-08
  • 打赏
  • 举报
回复
select
case birthday
when 'getdate()' then convert(char(10),getdate(),120)
else birthday
end as birthday
from
person
冷箫轻笛 2006-05-08
  • 打赏
  • 举报
回复
declare @sql varchar(200)
set @sql= 'getdate()'
exec ('select ' + @sql)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧