我很难找到关于这个主题的更多信息,所以我想知道你们中是否有人能够启发我。
我基本上有一个用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,但我不确定。
这可能有一个非常简单的解决方案,但正如我之前提到的,我真的很难找到任何有用的信息。
答案 0 :(得分: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
答案 1 :(得分:0)
你试过了吗?
USE [AdventureWorksDW2008R2]
GO
select [dbo].HelloWorld('Hello World, this is my string!')
GO
答案 2 :(得分:-1)
"您缺少括号"
我认为这是误导。该示例显示了括号和非括号的调用函数的方法。
真正的一点是,输出从未分配给任何东西,因此被丢弃,如本例所示。
EXEC [dbo] .HelloWorld' Hello World,这是我的字符串!'
通过在函数调用前添加单词SELECT,或将其分配给变量(如" exec @a ="),函数调用的返回值将分配给局部变量,可供调用代码使用。 (对于SELECT变体,局部变量在幕后创建,然后由查询编辑器在内部使用,以便显示结果。)
函数调用一直在运行,但代码片段没有做任何事情来捕获它的输出。
(很抱歉,根据塞巴斯蒂安的回答,我无法将此作为评论发布,但我没有足够的声誉点来做到这一点。)