Sql server 不带[dbo]的用户标量值函数。部分

Sql server 不带[dbo]的用户标量值函数。部分,sql-server,Sql Server,我在一个基于JasperReports的报告工具上工作,它使用多种类型的数据库Postgresql、Sql Server和Oracle。所有平台共享一个共同的Jasper域,其中一些域需要共同的脚本化sql选择查询,例如表xxx中的select blah 在一个特定的脚本中,我需要引用在所有平台上创建的用户函数 问题是,对于脚本,我可以将此函数引用为 select my_func(col1, col2) from some_table 在PostgreSQL和Oracle安装上。但无法在SQ

我在一个基于JasperReports的报告工具上工作,它使用多种类型的数据库Postgresql、Sql Server和Oracle。所有平台共享一个共同的Jasper域,其中一些域需要共同的脚本化sql选择查询,例如表xxx中的select blah

在一个特定的脚本中,我需要引用在所有平台上创建的用户函数

问题是,对于脚本,我可以将此函数引用为

select my_func(col1, col2) from some_table 
在PostgreSQL和Oracle安装上。但无法在SQL Server上运行相同的查询,因为get'my_func不是可识别的内置函数名。'错误消息。 为了使它工作,我必须用dbo.来限定函数

当然,这在Oracle和Postgresql上是行不通的


所以我的问题是,无论如何,在SQL Server上创建这个函数是为了能够调用它,而不必使用dbo来限定它。部分。

我认为SQL Server不可能

可以在使用标量表达式的位置调用标量值函数 习惯于这包括计算列和检查约束定义。 标量值函数也可以通过使用EXECUTE 陈述标量值函数必须至少使用 函数的两部分名称。有关 多部分名称,请参见Transact-SQL语法约定Transact-SQL。 可以在使用表表达式的位置调用表值函数 SELECT、INSERT、UPDATE或DELETE的FROM子句中允许 声明。有关更多信息,请参见执行用户定义函数

重点补充

见:

您可以省略架构,而改为引用数据库名称:

[database]..[object]

我认为SQL Server不可能

可以在使用标量表达式的位置调用标量值函数 习惯于这包括计算列和检查约束定义。 标量值函数也可以通过使用EXECUTE 陈述标量值函数必须至少使用 函数的两部分名称。有关 多部分名称,请参见Transact-SQL语法约定Transact-SQL。 可以在使用表表达式的位置调用表值函数 SELECT、INSERT、UPDATE或DELETE的FROM子句中允许 声明。有关更多信息,请参见执行用户定义函数

重点补充

见:

您可以省略架构,而改为引用数据库名称:

[database]..[object]

正如Michael G在上面提到的,您应该在SQL Server上指定dbo。所以问题是多DBMS支持。在编程级别有几种解决方案,比如预处理SQL代码

您还可以在视图中封装函数,并在Oracle和PostgreSQL上使用它

SQL Server

CREATE VIEW my_func_view AS SELECT dbo.my_func(col1, col2) AS col12 FROM some_table
神谕

CREATE VIEW my_func_view AS SELECT my_func(col1, col2) AS col12 FROM some_table
在代码中

SELECT * FROM my_func_view

正如Michael G在上面提到的,您应该在SQL Server上指定dbo。所以问题是多DBMS支持。在编程级别有几种解决方案,比如预处理SQL代码

您还可以在视图中封装函数,并在Oracle和PostgreSQL上使用它

SQL Server

CREATE VIEW my_func_view AS SELECT dbo.my_func(col1, col2) AS col12 FROM some_table
神谕

CREATE VIEW my_func_view AS SELECT my_func(col1, col2) AS col12 FROM some_table
在代码中

SELECT * FROM my_func_view

... 当然,这在Oracle和Sql Server上不起作用,感谢您指出这一点。更正了帖子。。。当然,这在Oracle和Sql Server上不起作用,感谢您指出这一点。更正了帖子这对也是正确的这对也是正确的