[求教:动态语句中调用自定义函数问题]

雷肿么了 2011-06-22 09:03:20

--有如下SQL语句,怎么写才能在dbo.ReturnOrderbyColumn()中使用在动态语句中定义的@RKEY:
DECLARE @SQL VARCHAR(1000)

SET @SQL='
DECLARE @RKEY INT
SET @RKEY=27781
SELECT * FROM DATA0050 '+dbo.ReturnOrderbyColumn(@RKEY)+'

'
PRINT @SQL


...全文
131 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2011-06-22
  • 打赏
  • 举报
回复
函数里面不能使用存储过程啊

存储过程倒是可以使用函数 不过没什么必要 直接写成存储过程多好

调用参数
叶子 2011-06-22
  • 打赏
  • 举报
回复

declare @table table (id int,col varchar(1))
insert into @table
select 101,'a' union all
select 201,'b' union all
select 301,'c' union all
select 409,'d'

declare @userid varchar(2000),
@sqlstr varchar(4000)
set @userid='201,102,301,104,199'

SELECT * FROM @table
WHERE CHARINDEX(','+CAST(id AS VARCHAR(4))+',',','+@userid+',')>0
/*
id col
----------- ----
201 b
301 c
*/

是不是这个意思?
雷肿么了 2011-06-22
  • 打赏
  • 举报
回复

To:maco_wang

dbo.ReturnOrderbyColumn()这个函数返回的是字段串。
下面我讲下我的需求吧,可能你们有更好的解决办法

储存过程会接收一个参数@RKEY 它的值是类似于 '111,222,333,'
我想在动态SQL 里根据','分割@RKEY,分别将111,222,333 传给dbo.ReturnOrderbyColumn()
然后在动态SQL里每次设置 SET @RKEY=SUBSTRING(@RKEY,CHARINDEX(',',@RKEY)+1,LEN(@RKEY))

能不能在动态SQL里设置参数@RKEY的值,就是下面这步操作
SET @RKEY=SUBSTRING(@RKEY,CHARINDEX(',',@RKEY)+1,LEN(@RKEY))


xuexiaodong2009 2011-06-22
  • 打赏
  • 举报
回复
14在数据库中拼字符串,也可以用参数

在实际的开发中,某些情况下在数据库中拼字符串不可避免,但又担心有特殊字符,导致拼出来的SQL有问题,其实数据库中拼字符串也可以使用参数,这就要用到dbo.sp_executesql ,这样就可以避免SQL注入和特殊字符导致的错误



DECLARE @IntVariable INT;--定义变量
DECLARE @SQLString NVARCHAR(500);--存储拼出来的SQL
DECLARE @ParmDefinition NVARCHAR(500);---存储拼出来的SQL中的参数
/* Build the SQL string one time. */
SET @SQLString =
N'SELECT * FROM AdventureWorks.Sales.Store WHERE SalesPersonID = @SalesID';
/* Specify the parameter format one time. */
SET @ParmDefinition = N'@SalesID int';--赋值

/* Execute the string with the first parameter value. */
SET @IntVariable = 275;--赋值
EXECUTE dbo.sp_executesql @SQLString, @ParmDefinition,
@SalesID = @IntVariable;
/* Execute the same string with the second parameter value. */
SET @IntVariable = 276;
EXECUTE dbo.sp_executesql @SQLString, @ParmDefinition,
@SalesID = @IntVariable;
叶子 2011-06-22
  • 打赏
  • 举报
回复
函数返回的结果如果是字符串,可以拼接的。
如果是int,会提示类型转换失败。

函数内部不能exec,所以在函数里面是不能动态拼接的。

34,838

社区成员

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

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