在索引视图中,可否使用自定义函数?

WZZ 2006-11-08 11:41:07

CREATE TABLE SUPPLY1 (
supplyID INT PRIMARY KEY,
supplier CHAR(50)
)
CREATE TABLE SUPPLY2 (
supplyID INT PRIMARY KEY,
supplier CHAR(50)
)
INSERT SUPPLY1 VALUES ('1', 'CaliforniaCorp')
INSERT SUPPLY1 VALUES ('5', 'BraziliaLtd')
INSERT SUPPLY2 VALUES ('1', 'FarEast')
INSERT SUPPLY2 VALUES ('5', 'NZ')

-----------------------
CREATE FUNCTION dbo.scalar(@supplyID float)
RETURNS CHAR(50)
WITH SCHEMABINDING
AS
BEGIN
DECLARE @ AS CHAR(50)
SELECT @ = supplier FROM dbo.SUPPLY2 WHERE supplyID = @supplyID
RETURN @
END
GO

-- SELECT dbo.scalar(supplyID), * FROM SUPPLY4

-----------------------
/* 使用自定义函数 */
CREATE VIEW all_supplier_view WITH SCHEMABINDING
AS
SELECT dbo.scalar(supplyID) AS SID, supplyID, supplier
FROM dbo.SUPPLY1

-- SELECT * FROM all_supplier_view

------------------------

CREATE UNIQUE CLUSTERED INDEX /* 执行此句时出错 */
idx_all_supplier_view ON all_supplier_view(supplyID)



...全文
207 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WZZ 2006-11-08
  • 打赏
  • 举报
回复
就是说自定义函数中不可以有基础表的操作,对吧
CSDMN 2006-11-08
  • 打赏
  • 举报
回复
估计能用于视图索引的函数只有和数据表无关的转换函数,这样能用函数差不多等于不能用函数
CSDMN 2006-11-08
  • 打赏
  • 举报
回复
原因在于用户定义函数的不确定性

sql server的用户定义函数确实是非常难用,效率也很差,最好别用
CSDMN 2006-11-08
  • 打赏
  • 举报
回复
提示:

服务器: 消息 1956,级别 16,状态 1,行 1
无法在视图 'Test.dbo.all_supplier_view' 上创建索引,因其使用具有不确定性的用户定义函数。


应该能看懂中文吧


早起晚睡 2006-11-08
  • 打赏
  • 举报
回复
因该可以把

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧