我继承了一个ms sql server 2008服务器应用程序,在检查存储过程后,我注意到它们以USE [ELECS]
语句开头, ELECS 是数据库名称。
当我尝试重新创建其中一个存储过程时,我得到的是一个错误,说存储过程不能有一个use语句。
Msg 154,Level 15,State 1,Procedure TESTME,Line 3,USE数据库 在程序,功能或触发器中不允许使用语句。
ms sql server是否有一个允许这个的特殊功能?
答案 0 :(得分:11)
您最有可能在USE
/ CREATE
声明之上看到ALTER PROCEDURE
。
在这种情况下,它被用于设置应该更新过程的数据库。
它不能在存储过程中使用,但如果您希望引用其他数据库,可以在表引用中设置它。即:对于SELECT
声明:
SELECT *
FROM [DatabaseName].dbo.[TableName]
答案 1 :(得分:10)
在Go
声明之前使用USE[databaseName]
。在SQL 2005中为我工作
示例:
GO
USE [Database_Name]
Go
ALTER PROCEDURE [dbo].[Procedure_name]
答案 2 :(得分:3)
某些“顶级”语句需要首先出现在执行块中。您可以使用单词GO
所以:
USE [db]
GO
CREATE PROC....
如果你在讨论sproc里面的USE
语句,那么不,你不能这样做。 sproc已经由创建它的数据库确定范围。如果要访问另一个数据库,则需要使用三部分命名,例如: ELECS.dbo.tablename
假设dbo
是您的架构。
答案 3 :(得分:1)
没错,USE语句实际上并不是存储过程的一部分,而是它自己的语句,它指示工具(即企业管理器或查询分析器)使用哪个数据库。它永远不会发送到sql server本身,对它没有任何意义......