2011-12-15 57 views
2

我很努力地找到關於此主題的許多信息,所以我想知道你們中的任何一個人能否啓發我。在C編寫SQLServer用戶定義函數#

我基本上有一個用C#編寫的迷你應用程序,它接受一個字符串,對它執行一些操作,然後返回結果。我現在希望在SQLServer中創建這個函數,以便我可以在表中的記錄中輕鬆地運行它。我知道如何創建和運行用C#編寫的SQLServer UDF(即在創建函數之前在SQLServer中註冊.dll),但我似乎無法從我的函數中獲取任何輸出。舉例來說,如果我有以下的C#功能...

using System; 
using Microsoft.SqlServer.Server; 

public static class MyClrUdfClass 
{ 
    [SqlFunction] 
    public static string HelloWorld(string myString) 
    { 
     return (myString); 
    } 
} 

而我在這樣的SQLServer運行...

USE [AdventureWorksDW2008R2] 
GO 
EXEC [dbo].HelloWorld'Hello World, this is my string!' 
GO 

我在SQLServer的獲得,當我運行的唯一輸出功能「命令成功完成」。那麼myString在哪裏?我期待需要一些SQL來實際打印結果,但我不確定。

這可能有一個非常簡單的解決方案,但正如我前面提到的,我真的很努力地找到任何有用的信息。

+1

只是猜測,但你嘗試做電話: `SELECT [ dbo] .HelloWorld'Hello World,這是我的字符串!' – 2011-12-15 10:57:04

+0

是的,我嘗試了,但我得到了 - 多部分標識符「dbo」。HelloWorld「無法綁定 - 錯誤 – Rich 2011-12-15 11:38:58

回答

4

你缺少的括號:

SELECT [dbo].HelloWorld ('Hello World, this is my string!') 

或嘗試這種方式:

declare @a varchar(max) 
exec @a = [dbo].HelloWorld 'Hello World, this is my string!' 
print @a 
0

你試過:

USE [AdventureWorksDW2008R2] 
GO 
select [dbo].HelloWorld('Hello World, this is my string!') 
GO 

+0

是的,但我得到的錯誤無法綁定多部分標識符」dbo.HelloWorld「 – Rich 2011-12-15 11:38:07

-1

「你缺少的括號」

我認爲這是一種誤導。該示例顯示了調用該函數的帶括號和不帶括號的方式。

真實的一點是,輸出從未分配給任何東西,因此被丟棄,如本例所示。

EXEC [dbo] .HelloWorld'Hello World,這是我的字符串!'

通過在函數調用前添加單詞SELECT或將其分配給變量(如「exec @a =」),函數調用的返回值將分配給局部變量,並且變得可供調用代碼使用。 (在SELECT變體的情況下,局部變量在幕後創建,然後在查詢編輯器的內部使用,因此可以顯示結果。)

函數調用實際上一直在工作,但代碼片段沒有做任何事情來捕捉它的輸出。

(對不起,我不能張貼此爲下塞巴斯蒂安的答案評論,但我沒有足夠的聲望值做到這一點。)