27

我第一次在我的系统上安装了 SQL Server Management Studio Express 和 Visual Studio 2005。现在我正在尝试使用以下脚本创建表。但是,如果一旦我执行,我将面临如下错误

数据库“tempdb”中的 CREATE TABLE 权限被拒绝。

为什么呢?谁能帮我解决这个问题?

USE [tempdb]
GO

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Employee]
([FirstName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 [LastName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]

谢谢拉朱

4

6 回答 6

31

我进入数据库,安全,用户,右键单击用户,属性。成员资格,检查 db_owner。

于 2012-06-28T16:14:36.720 回答
19

我最初的猜测是您在此服务器上没有 CREATE 表权限。你能在下面运行这些查询吗?


-- get login first 
select suser_name() 
--or 
SELECT SYSTEM_USER

-- Now get the permissions assigned to you by the server administrator 
use tempDB 
GO 

;with getPermissions as ( SELECT * FROM fn_my_permissions (NULL, 'DATABASE') ) 
select permission_name from getPermissions 
where permission_name like 'create%' 
GO

如果 permission_name 列返回 0 行,则表示您没有此数据库的 CREATE 权限。请联系您的 DBA 为 tempDB 授予 db_ddladmin。然而,正如 Andomar 所指出的,临时表是在预先附加 # 时在 tempDB 中自动创建的。

于 2011-07-03T17:47:36.270 回答
15
Use tempdb
GO
Create User MyUserName For Login MyUserName with Default_Schema= [dbo];
go
use tempdb
go
EXEC sp_addrolemember 'db_ddladmin', N'MyUserName'
go

您需要 db_ddladmin 角色让预期用户创建新表。所以 db_datawriter 角色还不够。

于 2013-02-22T12:32:58.117 回答
12

您正在尝试在tempdb. 这很不寻常,只要 SQL Server 服务重新启动,tempdb 就会完全消失。

创建临时表的常规方法是:

create table #TempTable (...

#使其成为本地(特定于连接)的临时表。全局临时表以##. 以这种方式创建临时表不需要特殊权限。

于 2011-07-03T14:55:23.913 回答
1

我也遇到了这个问题。搜索它,大多数答案都是关于 db_owner 的,在 Security 菜单项中也检查过,但没有显示。在搜索时,我去了这个博客。Ivan Dimitrov的回答给了我一点提示。我的创建表查询是:

CREATE TABLE [dbo].[Album](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](150) NULL,
[Description] [nvarchar](500) NULL,
[TrackCount] [int] NULL,
[ReleaseYear] [int] NULL,
[Distributor] [nvarchar](500) NULL,
[ImageUrl] [nvarchar](max) NULL,
[CreatedDate] [datetime] NULL,
CONSTRAINT [PK_Album] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

我删除了[dbo]。从查询中然后运行它,成功执行。也许这不是一个完整的解决方案,但我设法以某种方式使用它。

于 2017-11-30T06:59:35.567 回答
-1

我不确定这个答案是否会有所帮助,但我遇到了类似的问题,这就是我解决它的方法。我遇到的问题是由于我的“创建表”默认为 tempdb,我需要指定数据库名称。正如其他人所说,我检查了我的数据库访问操作员以确保我具有创建表权限。由于我已经拥有必要的权限,因此我提出了以下解决方案。

以下返回 tempdb 错误:

driver={SQL Server};server=YOUR_SERVER_NAME;trusted_connection=true

一旦我包含了数据库名称,代码就可以正常工作。这是对我有用的代码:

driver={SQL Server};server=YOUR_SERVER_NAME;database=YOUR_DATABASE_NAME;trusted_connection=true'

我希望这篇文章有帮助!

于 2018-10-23T19:22:22.537 回答