這是MS SQL Server的:我已經包裹了系統存儲過程,sp_sequence_get_range,這樣我可以把它用一個簡單的選擇返回(我無法弄清楚如何處理與輸出參數在我的C#框架)。調用存儲過程與輸出參數
這是整個存儲過程:
CREATE PROCEDURE GetSequenceRange(@name VARCHAR, @counter INTEGER) AS
DECLARE @firstValue SQL_VARIANT = 0;
DECLARE @lastValue SQL_VARIANT = 0;
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'EXEC sp_sequence_get_range @sequence_name = N''' + @name + N''', @range_size = ' + CONVERT(VARCHAR, @counter)
+ N', @range_first_value = @firstValue OUTPUT, @range_last_value = @lastValue OUTPUT;'
EXECUTE sp_executesql @sql, N'@name VARCHAR, @counter INTEGER, @firstValue SQL_VARIANT OUTPUT, @lastValue SQL_VARIANT OUTPUT', @name, @counter, @firstValue OUTPUT, @lastValue OUTPUT
SELECT @firstValue, @lastValue
當我嘗試執行像
exec GetSequenceRange 'tablename', 3
的程序,我得到
無效的對象名稱 'T'。
不管我提供什麼名字,第一個字母都會在這個錯誤信息中返回。
我也曾嘗試
exec GetSequenceRange @name='tablename', @counter = 3
在所有這些例子中的'tablename'
是一個合格的序列名;我已經嘗試了owner.sequence和database.owner.sequence。
我覺得有一些根本性的錯誤我的做法,但我沒有看到它。
紅利,顯示如何從從C#調用sp_sequence_get_range的結果,而不必首先這個存儲過程包裝的答案。
你試過方括號中的名字?例如[mydb]。[dbo]。[sometable] – BugFinder
創建過程語句中缺少的varchar大小是問題所在。 –
您還需要在動態sql中將長度添加到變量中。你應該總是聲明字符變量和列的長度。 –