7

我继承了一个 ms sql server 2008 服务器应用程序,在检查存储过程时,我注意到它们以USE [ELECS]语句开头,ELECS是数据库名称。

当我试图重新创建一个存储过程时,我得到的是一个错误,说存储过程不能有 use 语句。

消息 154,级别 15,状态 1,过程 TESTME,第 3 行不允许在过程、函数或触发器中使用 USE 数据库语句。

ms sql server 是否有允许这样做的特殊功能?

4

4 回答 4

12

您很可能在/语句USE上方看到了。CREATEALTER PROCEDURE

在这种情况下,它被用来设置程序应该在哪个数据库上更新。

它不能在存储过程中使用,但如果您希望引用不同的数据库,您可以在表引用中进行设置。即:对于一个SELECT声明:

SELECT *
FROM [DatabaseName].dbo.[TableName]
于 2012-11-16T15:42:17.133 回答
10

使用GobeforeUSE[databaseName]语句。在 SQL 2005 中为我工作

例子:

GO

USE [Database_Name]

Go

ALTER PROCEDURE [dbo].[Procedure_name]
于 2014-01-03T13:41:21.297 回答
3

某些“顶级”语句需要首先出现在执行块中。你可以用这个词来关闭/关闭一个执行块GO

所以:

USE [db]
GO

CREATE PROC....

如果您正在谈论存储过程中的USE语句,那么不,您不能这样做。sproc 已经被创建它的数据库所限定。如果你想访问另一个数据库,你需要使用三部分命名,例如ELECS.dbo.tablename假设dbo是你的模式。

于 2012-11-16T15:41:08.430 回答
1

没错,USE 语句实际上并不是存储过程的一部分,而是它自己的语句来指示工具(即企业管理器或查询分析器)使用哪个数据库。它永远不会被发送到 sql server 本身并且对它没有任何意义......

于 2012-11-16T15:42:56.303 回答