将函数结果赋值给SQL变量并显示

26

将asp.net代码(VB.net)迁移以使用函数和子程序作为参数。 使用MS Server Management Studio创建所述的函数和子程序。 希望在通过Web页面测试之前从MS SMS内测试函数。 这是一个例子。假设我有一个名为“dbo.getNumber”的函数。

我正在尝试使用以下方法进行测试:

USE [someDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
declare @value int;

select @value = dbo.getNumber;

print @value;
go

当我按下F5(运行“查询”)时,它会显示以下消息:

"dbo.getNumber"在此上下文中不被允许。有效的表达式是常量、常量表达式和(在某些上下文中)变量。列名是不被允许的。

顺便说一句,函数dbo.getNumber被正常接受了。(它正在统计满足特定条件的数据库记录数量。)

希望你能从不起作用的代码中推断出我想要做什么。

如何在SMS中打印函数的值(用于测试目的)?

根据下面的James Johnson所述的正确解决方案:

USE [someDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
declare @value int;

select @value = dbo.getNumber();

print @value;
go

注意函数调用时的括号。 还要注意:SMS中的智能感知会将dbo.getNumber()下划线标记为错误,但是使用F5运行查询可正常输出结果。


Note the parens for the function invocation. Note also: intellisense in SMS underlines dbo.getNumber() as if it were an error, but running the query with F5 works and outputs the right result.
1个回答

58
你需要这样调用它:
select @value = dbo.getNumber()

我被这个事实弄糊涂了,无论我做什么,它都像是错的一样被下划线标记。谢谢! - elbillaf
你好,我遇到了一个错误: 无法找到列“dbo”或用户定义的函数或聚合“dbo.GetPracticeByZoneID”,或名称不明确。 当我运行以下查询时。请建议。 选择@PracIDslist = dbo.GetPracticeByZoneID(-3) - user3328730
1
@Ganesh:要使此功能起作用,您需要在默认dbo模式下拥有名为getNumber的现有UDF。它不是内置函数或其他任何东西。 - James Johnson
感谢@JamesJohnson。 - user3328730

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接