好贷网好贷款

表值用户定义函数 引入变量  问题 20javawhy]

发布时间:2016-12-5 2:25:34 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"表值用户定义函数 引入变量  问题 20javawhy]",主要涉及到表值用户定义函数 引入变量  问题 20javawhy]方面的内容,对于表值用户定义函数 引入变量  问题 20javawhy]感兴趣的同学可以参考一下。

CREATE FUNCTION LAG  ( -- Add the parameters for the function here @table VARCHAR(20),          --表名 @p1 char,              --列名          @p2 char                            --条件值 ) RETURNS TABLE  AS RETURN  ( -- Add the SELECT statement with parameter references here SELECT @p1  FROM dbo.@table WHERE @[email protected] ) GO [email protected],[email protected]@table [email protected],@table, 比如:SELECT @p1  FROM dbo.@table WHERE @[email protected]    select ID from dbo.Users where [email protected] 则是可以. 但这样的话,就不能做到自定义函数通用 请教大师们,有没有办法实现 SELECT @p1  FROM dbo.@table WHERE @[email protected]

exec 'SELECT [email protected]+'  FROM [email protected]+' WHERE [email protected][email protected]+'' 

自定义函数不支持EXEC.

变量需要动态语句来拼接 用EXEC来执行

用动态SQL。

引用 1 楼 jiangshun 的回复:SQL [email protected]+'  FROM [email protected][email protected][email protected]+'' 正解

CREATE PROC p_test as SELECT GETDATE() a go CREATE VIEW v_test AS  SELECT * FROM OPENROWSET('SQLOLEDB.1','server=FI6\SQL2008;uid=sa;pwd=123','exec test11.dbo.p_test') go SELECT * FROM V_TEST /* a 2009-09-01 11:08:30.197 */ CREATE FUNCTION FN_TEST() RETURNS TABLE  AS  RETURN(     SELECT * FROM OPENROWSET('SQLOLEDB.1','server=FI6\SQL2008;uid=sa;pwd=123','exec test11.dbo.p_test') ) go SELECT * FROM FN_TEST() /* a 2009-09-01 11:08:30.197 */ 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/09/10/4539388.aspx 若是的确有这个需求,建议先做在存储过程,再通过此方式在函数中调用;

用存储过程

表变量需要用 sp_execsql  ''

引用 8 楼 budong0000 的回复:表变量需要用 sp_execsql  '' 具体点呢

引用 7 楼 soft_wsx 的回复:用存储过程 已经在尝试存储互调了 但报新错: CREATE PROCEDURE [dbo].[PROC_TEST]  -- Add the parameters for the stored procedure here @database VARCHAR(20) = NULL, @table VARCHAR(20) = NULL,  @column VARCHAR(40) = NULL AS BEGIN SELECT * FROM [@datebase].[dbo].[table]; END EXEC [PROC_TEST] '库,'表','字段' 为何报错:  "对象名  [email protected]' 无效。"

CREATE PROC p_test as SELECT GETDATE() a go CREATE FUNCTION FN_TEST() RETURNS TABLE  AS  RETURN(     SELECT * FROM OPENROWSET('SQLOLEDB.1','server=FI6\SQL2008;uid=sa;pwd=123','exec test11.dbo.p_test') ) go SELECT * FROM FN_TEST() 关于这个方法,我考虑下,因为存储过程中是可以引入参数,但函数调用的时候 RETURN(     SELECT * FROM OPENROWSET('SQLOLEDB.1','server=FI6\SQL2008;uid=sa;pwd=123','exec test11.dbo.p_test') ) 我不知道'exec test11.dbo.p_test(参数1,参数2)'这样行不行? 因为表值自定义函数中明文规定 在表值用户定义函数中:  RETURNS 子句为函数返回的表定义局部返回变量名。RETURNS 子句还定义表的格式。局部返回变量名的作用域位于函数内。 函数体中的 Transact-SQL 语句生成行并将其插入 RETURNS 子句定义的返回变量中。 当执行 RETURN 语句时,插入变量的行将作为函数的表格输出返回。RETURN 语句不能有参数。 因为SQL2005设置问题和项目的进度,没能够尝试,遗憾的很 最后采用了 大师 soft_wsx 的方法:存储过程调用 紧张的工作,让我学会了很多,在这里感谢大家对我的支持 最后请教大家,如何在CSDN中快速的得分,我的分快用完了....

上一篇:SQL server 2008 report service 20alan_lau]
下一篇:woshiyimingzhengzaixuexiruanjiandexuesheng 0fredrickhu]

相关文章

相关评论