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
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角色是不够的.
你正在尝试创建一个永久表tempdb.这是相当不寻常的,只要SQL Server服务重新启动,tempdb就会完全消失.
创建临时表的常规方法是:
create table #TempTable (...
Run Code Online (Sandbox Code Playgroud)
将#使其成为本地(连接特定的)临时表.全局临时表以##.以这种方式创建临时表不需要特殊权限.