sql-server – 在用户定义的函数中创建,删除和插入临时表
|
我正在尝试按照我的要求创建一个函数. 但是,当我创建或删除#tempTable时,它会给出一个错误:
我的理解是我们不能在函数中的#temptable上创建,删除或插入操作. 那是对的吗? 我的SQL: CREATE FUNCTION [dbo].[RT_ResultFunction]
(
Id VARCHAR(4000)
)
RETURNS @RT_ResultFunction TABLE
(
Id VARCHAR(20),Name varchar(20),Balance Int
)
AS
BEGIN
IF OBJECT_ID('tempdb..#tempTable') IS NOT NULL
DROP TABLE #tempTable
SELECT Id,COUNT(Balance)
INTO #tempTable
'Balance' FROM Table1
INSERT @RT_ResultFunction
SELECT T1.ID,T1,NAME,T2,Balance
FROM Table2 T1,#tempTable T2
WHERE T1.ID = T2.ID
RETURN
END
解决方法这是正确的 – 你不能有副作用声明:从这里:http://msdn.microsoft.com/en-us/library/aa175085(v=sql.80).aspx
即使没有DROP语句,您会发现任何尝试访问临时表都会给您提供消息(例如SELECT … INTO #TMP):
正如@Dems指出的那样,您可以使用表变量.因为这些是变量,所以它们在函数范围内,因此不会产生副作用. 您的函数可能运行如下: ...
BEGIN
DECLARE @tempTable table (id varchar(20),rows int)
insert @tempTable
SELECT Id,COUNT(Balance)
FROM Table1
INSERT @RT_ResultFunction
SELECT T1.ID,@tempTable T2
WHERE T1.ID = T2.ID
RETURN END
没有测试或任何东西,但你得到了要点. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
