我收到給定函數的以下錯誤。在SQL中創建和更改表值函數時不兼容對象類型
Msg 2010,Level 16,State 1,Procedure GetTableFromDelimitedValues,Line 2 無法對'dbo.GetTableFromDelimitedValues'執行更改,因爲它是不兼容的對象類型。
IF NOT EXISTS(SELECT 1 FROM sys.objects
WHERE object_id = OBJECT_ID('[GetTableFromDelimitedValues]'))
BEGIN
EXECUTE('CREATE FUNCTION [dbo].[GetTableFromDelimitedValues](@input varchar(max),
@delimiter char(1) = ",")) RETURNS @Result TABLE (
Value nvarchar(4000)) AS BEGIN RETURN END')
END
GO
ALTER FUNCTION [dbo].[GetTableFromDelimitedValues](
@input varchar(max),
@delimiter char(1) = ',')
RETURNS @Result TABLE
(
Value nvarchar(4000)
)
AS
BEGIN
DECLARE @position int;
DECLARE @column nvarchar(4000);
WHILE LEN(@input) > 0
BEGIN
SET @position = CHARINDEX(@delimiter, @input);
IF (@position < 0) OR (@position IS NULL)
BEGIN
SET @position = 0;
END
IF @position > 0
BEGIN
SET @column = SUBSTRING(@input, 1, @position - 1);
SET @input = SUBSTRING(@input, @position + 1, LEN(@input) - @position)
END
ELSE
BEGIN
SET @column = @input;
SET @input = '';
END
INSERT @Result (Value)
SELECT @column;
END;
RETURN;
END
GO
有人可以通過修復函數來幫助我獲得兼容類型嗎?
謝謝您的回覆。 最初我以與你所建議的方式(Drop | Create)相同的方式處理了這個問題,但它沒有經過DROP的問題,可能有時執行用戶可能沒有權限在產品環境中刪除,因此更安全的一面應該與ALTER一起。 – ary
@ary現在看看我已經更新了我的答案,以解決您在實際查詢中遇到的問題。 –
感謝您的持續幫助。 對不起,它沒有工作,並繼續顯示相同的錯誤。 無法對'dbo.GetTableFromDelimitedValues'執行更改,因爲它是不兼容的對象類型。 – ary