我继承了一个 ms sql server 2008 服务器应用程序,在检查存储过程时,我注意到它们以USE [ELECS]
语句开头,ELECS是数据库名称。
当我试图重新创建一个存储过程时,我得到的是一个错误,说存储过程不能有 use 语句。
消息 154,级别 15,状态 1,过程 TESTME,第 3 行不允许在过程、函数或触发器中使用 USE 数据库语句。
ms sql server 是否有允许这样做的特殊功能?
我继承了一个 ms sql server 2008 服务器应用程序,在检查存储过程时,我注意到它们以USE [ELECS]
语句开头,ELECS是数据库名称。
当我试图重新创建一个存储过程时,我得到的是一个错误,说存储过程不能有 use 语句。
消息 154,级别 15,状态 1,过程 TESTME,第 3 行不允许在过程、函数或触发器中使用 USE 数据库语句。
ms sql server 是否有允许这样做的特殊功能?
您很可能在/语句USE
上方看到了。CREATE
ALTER PROCEDURE
在这种情况下,它被用来设置程序应该在哪个数据库上更新。
它不能在存储过程中使用,但如果您希望引用不同的数据库,您可以在表引用中进行设置。即:对于一个SELECT
声明:
SELECT *
FROM [DatabaseName].dbo.[TableName]
使用Go
beforeUSE[databaseName]
语句。在 SQL 2005 中为我工作
例子:
GO
USE [Database_Name]
Go
ALTER PROCEDURE [dbo].[Procedure_name]
某些“顶级”语句需要首先出现在执行块中。你可以用这个词来关闭/关闭一个执行块GO
所以:
USE [db]
GO
CREATE PROC....
如果您正在谈论存储过程中的USE
语句,那么不,您不能这样做。sproc 已经被创建它的数据库所限定。如果你想访问另一个数据库,你需要使用三部分命名,例如ELECS.dbo.tablename
假设dbo
是你的模式。
没错,USE 语句实际上并不是存储过程的一部分,而是它自己的语句来指示工具(即企业管理器或查询分析器)使用哪个数据库。它永远不会被发送到 sql server 本身并且对它没有任何意义......