結論 : 一定要使用SP才能作業
如下為原本的問題內容
//-----------------------------------------------------------
自訂函數無法對Table進行INSERT、UPDATE與DELETE的操作,
預存程序才能進行。
但我仍然嘗試了以下這個方法 :
create table [dbo].[testTable](
[id] [int] identity(1,1) not null,
[value] [nvarchar](max) null
)
create function InsertToDB(
@value nvarchar(MAX)
)
returns nvarchar(1000)
as
begin
declare @cmd nvarchar(max)
set @cmd = 'insert testTable output inserted.id values ('+ @value +')'
exec sp_executesql @cmd
--這邊想要回傳insert進去的id,但不知如何作業
return 'sucess'
end
select [dbo].InsertToDB('test123')
只有函數和一些擴充預存程序可以從函數內執行。
想詢問兩個問題 :
謝謝您把我的問題指出來,已更新我的發問內容。
不好意思,好像有一點明白了,您是想表達若此用參數的話,就可以達成嗎?
但我現在改寫成以下的方式,還是會有錯誤訊息,請問是否有那裡寫錯了呢?
create function InsertToDB(
@value nvarchar(MAX)
)
returns nvarchar(1000)
as
begin
insert into "[dbo].[testTable]"("value") values (@value)
--這邊想要回傳insert進去的id,但不知如何作業
return 'sucess'
end
--exec
select [dbo].InsertToDB('test123')
無效的物件名稱 '[dbo].[testTable]'。
自動編號的取得您可以參考這篇文章:
MSSQL取得剛新增資料的自動編號
另外在MS SQL裡的函數是不能對資料庫中的資料進行修改操作,就是不能新增、修改、刪除資料庫中的資料。所以,你想在函數中向table inster資料是作不到的,但您可以用stored procedure來作,以下是簡單的範例:
ALTER PROCEDURE [dbo].[sp_InsertToDB]
@value nvarchar(MAX)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @id int
insert into testTable([value]) values (@value);
select scope_identity()
END