Sql server 如果在SQLCMD模式变量中定义了数据库名称,如何创建对象(函数)?

Sql server 如果在SQLCMD模式变量中定义了数据库名称,如何创建对象(函数)?,sql-server,database,function,sqlcmd,Sql Server,Database,Function,Sqlcmd,我的SQL如下所示: :SETVAR VAR_DB_NAME DatabaseName.DBO SELECT * FROM $(VAR_DB_NAME).tableName 如果我尝试这样做: CREATE FUNCTION $(VAR_DB_NAME).FunctionName 我得到一个错误: “创建/更改函数”不允许将数据库名称指定为 对象名称的前缀 如何检查函数是否存在并使用相同的变量创建/删除它?正如错误所述,create语句中不能包含数据库名称。这项工作: :SETVAR VA

我的SQL如下所示:

:SETVAR VAR_DB_NAME DatabaseName.DBO

SELECT * FROM $(VAR_DB_NAME).tableName
如果我尝试这样做:

CREATE FUNCTION $(VAR_DB_NAME).FunctionName
我得到一个错误:

“创建/更改函数”不允许将数据库名称指定为 对象名称的前缀


如何检查函数是否存在并使用相同的变量创建/删除它?

正如错误所述,create语句中不能包含数据库名称。这项工作:

:SETVAR VAR_DB_NAME DatabaseName
:SETVAR VAR_SCHEMA_NAME dbo

use $(VAR_DB_NAME)
go

create function $(VAR_SCHEMA_NAME).foo()
returns int
as 
begin
return (1)
end
go

无论如何,这里最好使用两个变量:在我看来,不应该(错误地)使用名为“DB_NAME”的变量来包含架构名称。

正如错误所述,不能在CREATE语句中包含数据库名称。这项工作:

:SETVAR VAR_DB_NAME DatabaseName
:SETVAR VAR_SCHEMA_NAME dbo

use $(VAR_DB_NAME)
go

create function $(VAR_SCHEMA_NAME).foo()
returns int
as 
begin
return (1)
end
go
无论如何,这里最好使用两个变量:在我看来,不应该(mis)使用名为“DB_NAME”的变量来包含模式名称