我是SQL新手,所以我可能犯了一個非常簡單的錯誤,希望有人能指出它是什麼。在函數調用存儲過程中找不到用戶定義的函數
我有一個生成一個新的主鍵(我知道有一個自動的方式來做到這一點,但我們要處理我們自己的一代)以下現有的存儲過程:
ALTER PROCEDURE [dbo].[newid] @tablename AS CHAR(10), @fieldname AS CHAR(15) = '', @ioffset AS INT, @theID as int = 0 output
AS
BEGIN
SET NOCOUNT ON
DECLARE @value AS INT
IF @ioffset < 1 SET @ioffset = 1
IF LEN(@fieldname) > 0
BEGIN
UPDATE id SET @value = CONVERT(INT,cvalue)[email protected], cvalue = CONVERT(CHAR,(CONVERT(INT,cvalue)[email protected])) WHERE UPPER(ctablename) = UPPER(@tablename) AND UPPER(cfieldname) = UPPER(@fieldname)
SELECT @value
END
ELSE
BEGIN
UPDATE id SET @value = CONVERT(INT,cvalue)[email protected], cvalue = CONVERT(CHAR,(CONVERT(INT,cvalue)[email protected])) WHERE UPPER(ctablename) = UPPER(@tablename)
SELECT @value
End
SET NOCOUNT OFF
set @theID = @value
END
我需要從select語句中調用它,所以我必須創建一個可以調用它的shell函數。我創建了下面的標量值函數:
ALTER FUNCTION [dbo].[GetNextID]
(
@tablename AS CHAR(10),
@fieldname AS CHAR(15) = '',
@ioffset AS INT
)
RETURNS int
AS
BEGIN
RETURN dbo.newid(@tablename, @fieldname, @ioffset)
END
我現在想對此進行測試,使用以下:
DECLARE @ret int
EXEC @ret = dbo.GetNextID 'Client','iclientid',1
PRINT @ret
我得到的錯誤:
Cannot find either column "dbo" or the user-defined function or aggregate "dbo.newid", or the name is ambiguous.
正如我所說的,我是SQL新手,我確信有一些非常簡單的東西,我錯過了。
SOLUTION
既然你無法從功能訪問一個存儲過程,我決定主張允許自動遞增的情況。由於這是一次轉換爲內部數據庫,建立表格以允許它,然後在數據傳輸後更改它似乎是處理它的最佳方式。
它的一個函數,所以稱之爲'SELECT GetNextID('Client','iclientid',1)'執行... – user2989408