【发布时间】:2014-11-24 08:57:39
【问题描述】:
我有一个函数,它将返回所有公司中的所有项目。表名称应该是参数化的。但是我无法从该函数创建视图。因为我无法返回表。返回的值是一个字符串。请帮忙。谢谢。
GO
IF OBJECT_ID(N'dbo.ufnGetContactInformation', N'TF') IS NOT NULL
DROP FUNCTION dbo.ufnGetContactInformation;
GO
CREATE FUNCTION dbo.ufnGetContactInformation()
RETURNS @retContactInformation TABLE
(
-- Columns returned by the function
firm nvarchar(50) NULL
)
AS
BEGIN
DECLARE @referans AS INT, @NRP AS INT
DECLARE @TABLE AS NVARCHAR(MAX)
SET @TABLE = ''
DECLARE YourCursorNameHere CURSOR READ_ONLY
FOR
select c1.NR, C2.NR
from L_caPIFIRM c1 WITH(nolock)
INNER JOIN L_CAPIPERIOD C2 WITH(nolock) ON C1.NR=C2.FIRMNR
OPEN YourCursorNameHere
FETCH NEXT FROM YourCursorNameHere INTO @referans, @NRP
WHILE @@FETCH_STATUS = 0
BEGIN
IF @TABLE = ''
SET @TABLE= 'SELECT FIRM=' + str(@referans) +', CODE FROM LG_' + SUBSTRING(('00'+ LTRIM(STR(@referans))),LEN(('00'+ LTRIM(STR(@referans))))-2,3)+ '_ITEMS'
ELSE
SET @TABLE= @TABLE + ' UNION SELECT FIRM=' + str(@referans) +', CODE FROM LG_' + SUBSTRING(('00'+ LTRIM(STR(@referans))),LEN(('00'+ LTRIM(STR(@referans))))-2,3)+ '_ITEMS'
FETCH NEXT FROM YourCursorNameHERE INTO @referans,@NRP
END
-- EXEC( @TABLE)
CLOSE YourCursorNameHere
DEALLOCATE YourCursorNameHere
--BEGIN
-- INSERT INTO select
-- END
RETURN;
END;
GO
【问题讨论】:
-
请提供更多细节。你想达到什么目的?在函数中使用游标是非常糟糕的做法。它对性能有非常严重的影响。
-
实际上我有表 LG_001_Items,LG_002_Items.. 我想获取该表中的所有值并创建一个视图。数字 001,002... 是公司编号,它们应该是动态的,我从中读取它们公司表。谢谢。
标签: sql-server tsql stored-functions