我创建了一个名为abc-123
的sql server数据库,我创建了一个表Emp,当我像
select * from abc-123.emp;
那样运行时,我得到了结果。
但是当我试图向用户授予一些特权时,我无法做到这一点,在连字符附近出现语法错误。
任何人都会帮助我吗?
答案 0 :(得分:24)
确保使用[](T-SQL)或“”(ANSI SQL)转义名称。您使用的是非标准命名。
-- Sample select
SELECT * FROM [abc-123].[dbo].[emp];
SELECT * FROM "abc-123"."dbo"."emp";
1 - 你能给我一个授权TSQL的例子吗?如果您正在从SSMS执行操作,请右键单击并编写代码脚本。
2 - 这是GRANT TSQL命令的链接。我没有看到你正在尝试的任何语法。
http://technet.microsoft.com/en-us/library/ms188371.aspx
TO 'drupal'@'localhost' IDENTIFIED BY 'Drup@l';
首先,它应该是[drupal@localhost]
。其次,我从未见过IDENTIFIED BY
条款。你从哪里获得这些信息?
3 - 这是一个快速的TSQL脚本,它创建了一个命名错误的数据库和用户。如果可能,请更改数据库和用户的名称。
此外,如果您在db_owner以外的表级别授予权限(非常精细和大量维护),则创建用户定义的数据库角色。向该角色添加securables并将您的用户添加到该角色。
http://technet.microsoft.com/en-us/library/ms187936.aspx
示例代码。
-- Create new database
create database [abc-123]
go
-- Use new database
use [abc-123];
go
-- Create table from sample data
select
[BusinessEntityID]
,[PersonType]
,[NameStyle]
,[Title]
,[FirstName]
,[MiddleName]
,[LastName]
,[Suffix]
,[EmailPromotion]
, cast([AdditionalContactInfo] as varchar(max))
as [AdditionalContactInfoTxt]
, cast([Demographics] as varchar(max))
as [DemographicsTxt]
,[rowguid]
,[ModifiedDate]
into
[abc-123].[dbo].[emp]
from
AdventureWorks2012.Person.Person;
-- Create a login
CREATE LOGIN [drupal@localhost] WITH PASSWORD=N'Ja08n13$', DEFAULT_DATABASE=[abc-123]
GO
-- Create a user
CREATE USER [drupal@localhost] FOR LOGIN [drupal@localhost] WITH DEFAULT_SCHEMA=[dbo]
GO
-- Add to database owner role
EXEC sp_addrolemember 'db_owner', [drupal@localhost]
GO
使用db_owner组中的用户输出。
答案 1 :(得分:2)
使用[]
围绕数据库名称:
SELECT * FROM [abc-123].[dbo].emp;
OR
SELECT * FROM [abc-123].dbo.emp;
答案 2 :(得分:2)
对数据库名称使用反引号
select * from `abc-123`.emp;
或者,使用USE语句选择现有数据库并运行查询。
USE `abc-123`;
select * from emp;
答案 3 :(得分:1)
如果您使用带表名的databasename,那么也可以指定schema
名称。
select * from [abc-123].dbo.emp