我第一次在我的系统上安装SQL Server Management Studio Express和Visual Studio 2005。现在我尝试使用下面的脚本创建表。但是,如果我执行一次,我将面临像
这样的错误CREATE TABLE权限被拒绝 数据库'tempdb'。
为什么呢?任何人都可以帮我解决这个问题吗?
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]
由于 拉朱
答案 0 :(得分:17)
我进入数据库,安全性,用户,右键单击用户,属性。 成员资格,检查db_owner。
答案 1 :(得分:11)
我最初的猜测是你在这台服务器上没有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行,则表示您对此DB没有CREATE权限。联系您的DBA以为tempDB授予db_ddladmin。然而,正如Andomar所指出的,临时表是在预先附加#时在tempDB中自动创建的。
答案 2 :(得分: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
您需要db_ddladmin角色才能为目标用户创建新表。所以db_datawriter角色是不够的。
答案 3 :(得分:9)
您正试图在tempdb
中创建一个永久表。这很不寻常,只要SQL Server服务重新启动,tempdb就会完全消失。
创建临时表的常规方法是:
create table #TempTable (...
#
使其成为本地(特定于连接)的临时表。全局临时表以##
开头。以这种方式创建临时表不需要特殊权限。
答案 4 :(得分:0)
我不确定这个答案是否会有所帮助,但是我遇到了类似的问题,这就是我解决的方法。我遇到的问题是由于我的“创建表”默认为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'
我希望这篇文章对您有所帮助!