sql2005自定义函数中不允许执行拼接的SQL语句,是否可以创建clr 函数传入sql 并返回string?

zjl8008 2014-02-20 11:40:32
--执行如下函数时,会提示 只有函数和扩展存储过程才能从函数内部执行。
CREATE function [dbo].[f_get_yzmc](@zdy nvarchar(2000),@yzid BIGINT)
returns VARCHAR(2000)
as
begin
declare @yzmc VARCHAR(2000) , @sql nVARCHAR(4000)
SET @sql=N'select @yzmc=('+@zdy+') from v_ys t2 where t2.id=@yzid'
EXEC sp_executesql @stmt = @sql,@params = N'@yzmc VARCHAR(2000) out,@yzid bigint ', @yzmc=@yzmc,@yzid=@yzid
return @yzmc
end

sql2005自定义函数中不允许执行拼接的SQL语句,是否可以创建clr 函数传入sql 并返回string?
如果可以,请给个例子,谢谢!
...全文
207 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
引用 4 楼 zjl8008 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 对了 ,这个@zdy的值是怎样的呢,看看是否不需要创建动态语句来实现呢
@zdy 主要是是 v_ys表(数据量大)中的列的拼接,我要实现的目的是根据条件,取不同的自定义的列拼接个数或顺序,类似公式。 如我在b表中列(类别,公式)公式列存储的内容类似:t2.列1+t2.列2,等等,每个类别不一样 我执行select clr函数(b.公式)as mc from v_ys t2,b where t2.类别=b.类别 用存储过程感觉不行,v_ys表行数太多 [/quote] 确实,这个用存储过程来实现是不行的,相当于你要对于每个数据,都要通过这个函数,直接返回一个字符串对吧。 那就先用c#创建一个clr函数,然后通过这个clr,再创建一个普通的函数,调用这个函数,来实现你的需求。 具体这个clr函数,就是传入一个字符串,然后在clr中动态拼接一个sql,然后通过连接数据库,执行sql,返回结果。
zjl8008 2014-02-20
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
对了 ,这个@zdy的值是怎样的呢,看看是否不需要创建动态语句来实现呢
@zdy 主要是是 v_ys表(数据量大)中的列的拼接,我要实现的目的是根据条件,取不同的自定义的列拼接个数或顺序,类似公式。 如我在b表中列(类别,公式)公式列存储的内容类似:t2.列1+t2.列2,等等,每个类别不一样 我执行select clr函数(b.公式)as mc from v_ys t2,b where t2.类别=b.类别 用存储过程感觉不行,v_ys表行数太多
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
如果实在要用clr函数,可以参考一下这个例子: SQL SERVER 2005 CLR集成之简单SQL函数 http://developer.51cto.com/art/200910/158170.htm
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
对了 ,这个@zdy的值是怎样的呢,看看是否不需要创建动态语句来实现呢
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
在函数中确实不可以执行动态创建的语句。 你说的clr返回string,这个是可以的
發糞塗牆 2014-02-20
  • 打赏
  • 举报
回复
引用 6 楼 zjl8008 的回复:
clt函数中可以直接获取当前数据库的连接吗?如果不能,那就必须传一个连接信息的字符串参数了吧?
用CLR是一个不错的选择
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
引用 6 楼 zjl8008 的回复:
clt函数中可以直接获取当前数据库的连接吗?如果不能,那就必须传一个连接信息的字符串参数了吧?
估计不行,可能得传入一个连接字符串的。 因为一般的clr函数,都只是处理一些 更适合c#来做的,计算,字符串比较等等的操作。
zjl8008 2014-02-20
  • 打赏
  • 举报
回复
clt函数中可以直接获取当前数据库的连接吗?如果不能,那就必须传一个连接信息的字符串参数了吧?

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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