表值用户定义函数 引入变量 问题
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
[解决办法]
exec 'SELECT '+@p1+' FROM dbo.'+@table+' WHERE '+@p1+'='+@p2+''
[解决办法]
CREATE PROC p_testasSELECT GETDATE() agoCREATE VIEW v_testAS SELECT * FROM OPENROWSET('SQLOLEDB.1','server=FI6\SQL2008;uid=sa;pwd=123','exec test11.dbo.p_test')goSELECT * FROM V_TEST/*a2009-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'))goSELECT * FROM FN_TEST()/*a2009-09-01 11:08:30.197*/本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/09/10/4539388.aspx