我的本地开发服务器在中东,但我的生产服务器在英国。
我需要在他们的时区向用户显示日期。例如,如果用户在沙特阿拉伯,那么我需要根据沙特阿拉伯格式显示时间。
我应该创建一个名为 TimeZone 的新数据库表并以 UTC 格式保存时间吗?
我在 SQL Azure 中创建了一个架构,并向数据库角色授予了以下权限:
CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';
CREATE SCHEMA myschema AUTHORIZATION dbo;
GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW
DEFINITION ON SCHEMA::myschema TO myrole;
GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;
Run Code Online (Sandbox Code Playgroud)
通过上面定义的权限myuser
可以创建/删除自己的模式,所以为了克服这个问题我尝试了 ALTER ANY SCHEMA 权限。但此权限也拒绝用户创建/删除表。
需要什么权限才能允许用户在他自己的架构中做任何事情,但不能创建或删除架构本身?
我使用 SQL Server 2008 R2 已经有一段时间了,它运行良好。现在我需要使用 SQL Server 2012。这会影响我现有的数据库吗?在运行 SQL Server 2008 R2 的计算机上安装 SQL Server 2012 涉及多少风险?
我发现一些 SP(存储过程)写成,
CREATE PROCEDURE [dbo].[XXX]
(
-- Parameters
)
BEGIN
--- Actual Work
END
Run Code Online (Sandbox Code Playgroud)
还有一些作为
CREATE PROCEDURE [dbo].[XXX]
(
-- Parameters
)
--- Actual Work
Run Code Online (Sandbox Code Playgroud)
是什么让它与众不同?
我已经看到很多人将与表相关的条件放在 JOIN 子句上。看这个例子,
SELECT i.Name
FROM sys.TABLES AS tbl
INNER JOIN sys.indexes AS i
ON (i.index_id > 0 AND i.is_hypothetical = 0)
AND (i.object_id = tbl.object_id)
WHERE (i.is_unique = 1 AND i.is_disabled = 0)
AND (tbl.Name = 'Warehouse')
SELECT i.Name
FROM sys.TABLES AS tbl
INNER JOIN sys.indexes AS i
ON (i.object_id = tbl.object_id)
WHERE (i.index_id > 0 AND i.is_hypothetical = 0)
AND (i.is_unique = 1 AND i.is_disabled = 0)
AND (tbl.Name = 'Warehouse')
Run Code Online (Sandbox Code Playgroud)
查询相同,但不同之处在于,第一个(i.index_id > 0 AND i.is_hypothetical = …
我正在运行生产数据库,通常每分钟有 50-100 个插入。我正在尝试使用以下方法在生产数据库中添加一个新列,
ALTER TABLE MyDB ADD [MyColumn] varchar(30)
GO
Run Code Online (Sandbox Code Playgroud)
这个查询一直在运行,直到我停止它才完成。我还能做什么?
我有一个包含数百万行的表。这个表有一个我们经常过滤的列(意味着我们经常在WHERE子句中使用它),值是Insert/Update/Ignored。向列添加索引是否有意义?有人告诉我在少数值列上添加索引没有任何好处
我有一个连接到 SQL Server 的应用程序。目前我得到,
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Run Code Online (Sandbox Code Playgroud)
我跑的时候,
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
DB_NAME(dbid) ='MyDb'
GROUP BY
dbid, loginame
DBName NumberOfConnections LoginName
MyDb 10 sa
MyDb 109 MyUser
Run Code Online (Sandbox Code Playgroud)
所有进程的状态是sleeping
,cms是AWAITING COMMAND
这是我的代码,
private async Task<object> ExecuteAsync<T>(ExecutionType executionType, CommandType commandType, string commandText, IsolationLevel …
Run Code Online (Sandbox Code Playgroud) 我们的应用程序由于以下原因突然停止工作The transaction log for database 'tempdb' is full due to 'ACTIVE_TRANSACTION'.
。现在,它又开始工作了。但我怎样才能知道这个错误出现的确切原因呢?
可以说,我有一个查询,
SELECT * FROM MyTable WHERE MyParam = 0 OR MyColumn = MyParam
Run Code Online (Sandbox Code Playgroud)
这里 MyParam 是参数和可选的。因此,它只检查MyColumn = MyParam
MyParam 是否不为 0。但是我们的 DBA 说 OR 会使其变慢,而 db 会受到影响。另一种选择是,
IF MyParam = 0
SELECT * FROM MyTable WHERE MyColumn = MyParam
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于我们有很多可选参数。所以,我们的查询变得非常非常大。另一种选择是 CASE。
所以你们的建议是什么。我在谈论一般是 Oracle 还是 SQL Server。
我们正在做一个新的数据库设计,我们预先设置一些规则。我不知道制定这些规则有多大意义,
每个表名和列名都应该有意义。它应该提供有关表或列用途的信息。
表名不应超过 27 个字符,列名不应超过 30 个字符。
表名是复数。例如:COMPANIES
, EMPLOYEES
, PERSONS
, GENDERS
, RELIGIONS
, COUNTRIES
, ...
每个表都有一个主键,table_name_ID
即NUMBER(15)
. 表名在主键列中用作单数。示例:该USER_REQUESTS
表的主键为USER_REQUEST_ID
。
如果表名或列名超出限制,则使用合适的缩写。示例:CMS_EXEMPTIONS
是保留内容管理系统豁免的表。
保留事务数据的表应以_TRANS
. 示例:COMPANY_TRANS
是保存公司相关交易数据的表。
每个表有 4 个 WHO 列,如下所示:
CREATE_USER NUMBER(15)
CREATE_DATE DATE
MODIFY_USER NUMBER(15)
MODIFY_DATE DATE
Run Code Online (Sandbox Code Playgroud)作为外键关系的列被命名为被引用表的主键。示例:如果一个表有对该COUNTRIES
表的引用,则引用列也被命名COUNTRY_ID
为该COUNTRIES
表的主键。
如果由于第一条规则(有意义的名称),引用列的含义应该不同于第 8 条规则,则应用有意义的名称规则。例如:COUNTRIES
如果它用于保持一个人的国籍而不是命名为 ,那么nationality 和 country 列都与table有关系NATIONALITY_ID
。
如果该表有多个与同一个表相关,则它们会被赋予不同的名称,例如BIRTH_COUNTRY_ID
,PASSPORT_ISSUE_COUNTRY_ID
如果表是表之间的关系表,则表名包含两个表名。
给有意义的名字一直是我们命名的第一条规则。
我们有一张桌子,
CREATE TABLE [dbo].[MyTable](
[MasterKey] [uniqueidentifier] NOT NULL,
[DetailKey] [varchar](100) NULL,
[JSON] [nvarchar](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [ix_MyTable_details] ON [dbo].[MyTable]
(
[MasterKey] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
我们有以下查询导致太多死锁/块。
IF EXISTS(SELECT 1 from [MyTable](nolock) where [MasterKey]= @MasterKey AND [DetailKey] = @DetailKey)
BEGIN
UPDATE [MyTable]
SET [JSON] = @JSON
WHERE [MasterKey]= @MasterKey AND [DetailKey] …
Run Code Online (Sandbox Code Playgroud) sql-server ×11
oracle ×2
ado.net ×1
installation ×1
permissions ×1
schema ×1
t-sql ×1
timezone ×1