我是新来的,所以请善待我。我有以下场景:
我有很多表,为了简单起见,它们在我的 MySQL 数据库的视图中表示。我的问题是我需要在这个视图中使用一个值来表示它是一种事件还是另一种事件(一个简单的布尔值),我试图通过以下方式实现:
`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent`
Run Code Online (Sandbox Code Playgroud)
结果表示为 int,因此由实体框架读取。问题是我真的需要一个布尔返回值,我试图通过以下方式实现:
CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent`
Run Code Online (Sandbox Code Playgroud)
这导致了一个错误,这个错误没有在 MySQL Workbench 中显示给我(我只收到烦人的“你有一个错误......”)。
你们能帮我吗?
试图在我的应用程序中解决它,但我真的更喜欢在数据库中解决这个问题,因为它以后会被其他软件使用。
我有一些使用 Entity Framework Code First 创建的数据库;应用程序正在运行,总的来说,我对 Code First 让我做的事情感到非常满意。我首先是一名程序员,其次是 DBA,这是必要的。我正在阅读 DataAttributes 以在 C# 中进一步描述我希望数据库执行的操作;我的问题是:将这些nvarchar(max)字符串放在我的桌子上会吃什么惩罚(见下面的例子)?
在这个特定的表中有几列;在 C# 中,它们是这样定义的:
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Name { get; set; }
public string Message { get; set; }
public string Source { get; set; }
public DateTime Generated { get; set; }
public DateTime Written { get; set; }
Run Code Online (Sandbox Code Playgroud)
我希望根据名称、来源、生成和书面内容进行查询和/或排序。我希望 Name 和 Source 的长度为 0-50 个字符,有时可达 150 个。我希望这个表开始时很小(<100k 行),但随着时间的推移显着增长(>1m 行)。显然消息可以是小或大的,并且可能不会被查询。
我想知道的是,我的 Name 和 Source …
sql-server entity-framework sql-server-2008-r2 azure-sql-database
我需要将现有数据库(包括其架构和结构)复制到另一个新数据库。我在 shell 命令环境中需要这个,而不是在 pgadmin 中。请帮助我。
nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01
Run Code Online (Sandbox Code Playgroud)
我的用户是“postgres”
nohup psql exampledbclone_01 < example-01.sql
Run Code Online (Sandbox Code Playgroud)
$ pg_dump mydb > db.sql
$ psql -d newdb -f db.sql
Run Code Online (Sandbox Code Playgroud) SQL Server 2012+ 中SEQUENCE声明的 usingNO CACHE和声明的 using之间有什么区别CACHE 1吗?
序列#1:
CREATE SEQUENCE dbo.MySeqCache1
AS INT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999
NO CYCLE
CACHE 1;
GO
Run Code Online (Sandbox Code Playgroud)
序列#2:
CREATE SEQUENCE dbo.MySeqNoCache
AS INT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999
NO CYCLE
NO CACHE;
GO
Run Code Online (Sandbox Code Playgroud)
两者之间有什么区别吗?在 SQL Server 2012+ 环境中使用时,它们的行为会有所不同吗?
当我看到一个看起来像这样的查询时,我正在调查一些阻塞:
SELECT SomeField FROM SomeTable NOLOCK
Run Code Online (Sandbox Code Playgroud)
我看到了NOLOCK并且很好奇它是如何阻塞其他查询的,在这种情况下是DELETE语句。我快速查看了使用的锁sp_lock,这是我所看到的:
DB S GRANT
TAB IS GRANT
PAG S GRANT
Run Code Online (Sandbox Code Playgroud)
现在,我的理解是NOLOCK应该只需要一个 Schema-Stability 锁,为什么它会抓住一个 IS 锁?
我的好奇心被勾起来了。我查看了 BOL,发现有两种使用方法,WITH (NOLOCK)以及已弃用的 . (NOLOCK),所以我决定尝试一下。我运行了以下查询,然后运行sp_lock:
SELECT SomeField FROM SomeTable WITH (NOLOCK)
Run Code Online (Sandbox Code Playgroud)
DB S 赠款 TAB Sch-S 授权
SELECT SomeField FROM SomeTable (NOLOCK)
Run Code Online (Sandbox Code Playgroud)
DB S 赠款 TAB Sch-S 授权
果然,有我的模式稳定性锁。所以我的问题是:这里发生了什么?如果使用 NOLOCK 的公认语法是WITH (NOLOCK)or (NOLOCK),那么为什么查询在只使用普通NOLOCK(不带括号)运行时不会出错?如果支持,为什么要抢 IS 锁?我在这里缺少什么?我一直在网上搜索答案,但到目前为止还不够。
我已经在 2008R2 和 2012 上对此进行了测试。
我有一个登录表,所有插入都由一个存储过程完成。
CREATE TABLE dbo.LogTable(
LogRefnr int IDENTITY(1, 1) NOT NULL,
LogQuery varchar(255) NOT NULL,
LogTime datetime NOT NULL,
logQueryDuration int NULL,
LogSessionID int NULL,
CONSTRAINT PK_Log PRIMARY KEY CLUSTERED (LogRefnr)
)
go
Create procedure DBO.LogInsert ( @Query varchar(255), @time datetime, @duration int, @SessinID int) as
begin
Insert into LogTable ( LogRefnr, LogQuery, logQueryDuration, LogSessionID)
Values (@Query, @time, @duration, @SessinID);
end;
GO
Run Code Online (Sandbox Code Playgroud)
目前该表中大约有 45500000 行,我想将日志记录定向到不同的表。
我的想法是使用以下脚本
begin Transaction
exec sp_rename LogTable, LogTableOld;
CREATE TABLE dbo.LogTable(
LogRefnr int IDENTITY(46000000, 1) NOT NULL, …Run Code Online (Sandbox Code Playgroud) 认为这已通过以下链接解决 - 解决方法有效 - 但补丁没有。与 Microsoft 支持一起解决。
http://support.microsoft.com/kb/2606883
好的,所以我有一个问题,我想把它扔给 StackOverflow,看看是否有人有想法。
请注意,这是 SQL Server 2008 R2
问题:启用触发器时,从包含 15000 条记录的表中删除 3000 条记录需要 3-4 分钟,禁用触发器时只需 3-5 秒。
表设置
我们将称为 Main 和 Secondary 的两个表。Secondary 包含我要删除的项目记录,因此当我执行删除操作时,我会加入到 Secondary 表中。在删除语句之前运行一个进程,以使用要删除的记录填充辅助表。
删除声明:
DELETE FROM MAIN
WHERE ID IN (
SELECT Secondary.ValueInt1
FROM Secondary
WHERE SECONDARY.GUID = '9FFD2C8DD3864EA7B78DA22B2ED572D7'
);
Run Code Online (Sandbox Code Playgroud)
这个表有很多列和大约 14 个不同的 NC 索引。在我确定触发器是问题之前,我尝试了很多不同的事情。
触发器
该表有 3 个触发器(插入、更新和删除操作各一个)。我修改了删除触发器的代码以使其返回,然后选择一个以查看它被触发了多少次。它在整个操作过程中只触发一次(如预期的那样)。
ALTER TRIGGER [dbo].[TR_MAIN_RD] ON [dbo].[MAIN]
AFTER DELETE
AS
SELECT 1
RETURN
Run Code Online (Sandbox Code Playgroud)
回顾
我有以下表格,
CREATE TABLE users (id int PRIMARY KEY);
-- already exists with data
CREATE TABLE message ();
Run Code Online (Sandbox Code Playgroud)
我如何改变messages表格,
sender被添加到其中sender引用users表的外键在哪里这没有用
# ALTER TABLE message ADD FOREIGN KEY (sender) REFERENCES users;
ERROR: column "sender" referenced in foreign key constraint does not exist
Run Code Online (Sandbox Code Playgroud)
这个语句也不会创建列吗?
更改外键约束所需的最低权限是多少?
在MySQL 5.5.41修复此错误后,我的迁移脚本停止工作:
我收到此错误:
SQLSTATE[42000]:语法错误或访问冲突:1142 REFERENCES 命令拒绝用户 'foo'@'localhost' 用于表 'core.users'(SQL:alter table `user_baz` 添加约束 user_baz_user_id_foreign 外键(`user_id`)引用`core`.`users`(`id`)在更新级联上删除级联)
这意味着我需要修复权限。我需要的最低权限是多少?
我在 Windows Server 2012 上使用 SQL Server 2014 - 12.0.2269.0 (X64),但遇到了一些内存问题。当我运行一个执行相当“繁重”计算的存储过程时,我在大约 10 分钟后收到一个错误:
资源池“默认”中的系统内存不足,无法运行此查询。
我的 SQL Server 有多个数据库(比如 15 个,但它们并不总是同时使用)。我查看了 SQL Server 日志文件(在我得到错误之后),我看到了很多这样的行:
2015-12-17 12:00:37.57 spid19s 由于资源池“default”内存不足,不允许为数据库“Database_Name”分配页面。有关详细信息,请参阅“ http://go.microsoft.com/fwlink/?LinkId=330673 ”。
在日志中生成一个报告,其中包含每个组件使用的内存(我认为)。如果我正确解释了报告,我们可以看到MEMORYCLERK_SQLBUFFERPOOL. 您可以在此处找到该报告:http : //pastebin.com/kgmk9dPH
我还生成了一个带有图表的报告,该图表显示了相同的“结论”:

这可能是另一个有用的报告:
请注意,我还在日志中看到了此错误:
2015-12-17 12:04:52.37 spid70 由于数据库内存压力导致页面分配失败:FAIL_PAGE_ALLOCATION 8
以下是有关服务器内存的一些信息:
服务器上的总内存:16 Gb
分配给 SQL 服务器的内存:12288 Mb
使用中的物理内存(来自sys.dm_os_process_memory):9287 Mb
如果它可以提供帮助,则该服务器不会托管任何 SharePoint 数据库。
sql-server ×5
mysql ×2
postgresql ×2
alter-table ×1
datatypes ×1
ddl ×1
delete ×1
foreign-key ×1
nolock ×1
performance ×1
select ×1
sequence ×1
syntax ×1
transaction ×1
trigger ×1