日期:2014-05-18  浏览次数:20397 次

表值用户定义函数 引入变量  问题
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 @p1=@p2
)
GO

RETURN语句中只认@p2,但不认@p1和@table

如果直接用字符串替代@p1,@table,
比如:SELECT @p1 FROM dbo.@table WHERE @p1=@p2改成
   select ID from dbo.Users where ID=@p2
则是可以.


但这样的话,就不能做到自定义函数通用

请教大师们,有没有办法实现 SELECT @p1 FROM dbo.@table WHERE @p1=@p2



------解决方案--------------------
SQL code
exec 'SELECT '+@p1+'  FROM dbo.'+@table+' WHERE '+@p1+'='+@p2+''

------解决方案--------------------
探讨
SQL codeexec'SELECT'+@p1+' FROM dbo.'+@table+' WHERE'+@p1+'='+@p2+''

------解决方案--------------------
SQL code
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