数据库'tempdb'中的CREATE TABLE权限被拒绝

Raj*_*ju 17 sql-server create-table

我第一次在我的系统上安装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]
Run Code Online (Sandbox Code Playgroud)

谢谢Raju

Phi*_*enn 19

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


Ram*_*Ram 12

我最初的猜测是你在这台服务器上没有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

Run Code Online (Sandbox Code Playgroud)

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


Mod*_*ury 10

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
Run Code Online (Sandbox Code Playgroud)

您需要db_ddladmin角色才能为目标用户创建新表.所以db_datawriter角色是不够的.


And*_*mar 9

你正在尝试创建一个永久表tempdb.这是相当不寻常的,只要SQL Server服务重新启动,tempdb就会完全消失.

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

create table #TempTable (...
Run Code Online (Sandbox Code Playgroud)

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