小编Aar*_*and的帖子

如何识别调用存储过程的程序?

作为应用程序数据库设计规范的一部分,我们被要求阻止执行一组直接从 SSMS/osql/sqlcmd 等触发的存储过程;也就是说,它们必须只被允许在应用程序本身内运行。

当我们的团队质疑这是否可行时,我们看到了一个演示,该演示将查询限制在特定系统(实际上它让查询运行,但记录到运行它的表中)。然而,这样做的过程是加密的,所以我们无法知道它是如何完成的。

我们如何做到这一点?

security sql-server stored-procedures sql-server-2014

4
推荐指数
1
解决办法
7285
查看次数

架构和用户权限

当我们自定义的、自产的 CMS 使用 GUI 创建数据表时,它会根据特定于站点的用户模式(即sitename)而不是模式创建它们dbo

问题是我们的站点特定用户目前没有“看到”这些其他模式,即使他们在db_owner角色中。因此,某处缺少权限设置,这将授予他们对这些表进行读写的能力。 

迁移到新的 SQL 服务器时发生了此问题。从 2005 工作组版到 2008 网络版。

schema sql-server permissions users

4
推荐指数
1
解决办法
390
查看次数

我应该将文档版本字段设置为主键的一部分吗

我应该将文档版本设置为主键吗我正在开发一个文档管理系统,并且我有这两个表代表整个表的一部分。

在此处输入图片说明

在 DocumentVersion 表上,我将主键设置为 (version + documentID) 。如果这是一种推荐的方法,其中 documentID 的类型为 int 而版本的类型为 decimal(5,2) ,那么任何人都可以提出建议吗?或者如果我创建一个新字段并将其设置为 DocumentVersion 表中的主键会更好?谢谢

sql-server-2008-r2 surrogate-key table

4
推荐指数
1
解决办法
408
查看次数

INSERT/UPDATE 存储过程本身死锁

我有一个表 (Database2.dbo.OrganizerDataDependencyChange),其中包含有关某些其他表中的行上次更改时间的信息。在这些表中的每一个上,我都有一个触发器,它调用一个存储过程 (Database2.dbo.SaveOrganizerDataDependencyChange),该过程简单地用触发器触发的时间更新 Database2.dbo.OrganizerDataDependencyChange。这些触发器是从 Database1 或 Database2 触发的,因此它们通常是跨数据库调用。

当更新表上的两个不同行时,我在 Database1.dbo.OrganizerDataDependencyChange 表上遇到读写死锁,我不明白为什么。表上只有一个索引,而且它是完全覆盖查询的聚集索引,因此不可能出现查找死锁,尽管 proc 中有两条语句,但我特地将其重写为我所理解的最佳方法避免并发问题,使用 WHERE NOT EXISTS 而不是使用 IF/ELSE 逻辑,所以它不应该从不同的角度出现在这个索引上,对吗?由于它是在触发器和跨数据库中触发的,因此我在重现该问题时遇到了一些困难,我当然可以重现阻塞,但这应该没问题,这正是我所期望的。

有人可以帮助我了解这里发生了什么吗?我可能可以使用 NOLOCK 提示或 applock 修复它,但我仍然不明白为什么会发生这种情况。

这是表:

CREATE TABLE [dbo].[OrganizerDataDependencyChange](
[TableID] [INT] NOT NULL,
[Database] [VARCHAR](150) NOT NULL,
[Updated] [DATETIME] NULL
)
CREATE CLUSTERED INDEX [CX_OrganizerDataDependencyChange_TableID_DB] ON [dbo].[OrganizerDataDependencyChange]
(
[TableID] ASC,
[Database] ASC
)
Run Code Online (Sandbox Code Playgroud)

这是存储过程:

CREATE PROCEDURE [dbo].[SaveOrganizerDataDependencyChange]
(
@TableID int,
@Database varchar(150)
)
AS
BEGIN

SET NOCOUNT ON;

    DECLARE @rowcount INT;

INSERT INTO dbo.OrganizerDataDependencyChange
        ( TableID, [Database], Updated )
SELECT TOP …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock insert update sql-server-2014

4
推荐指数
1
解决办法
4307
查看次数

安装 SSMS V17.0 的问题

当我尝试安装 SQL Server Management Studio 版本 17.0 时,收到以下错误消息:

“无法安装 SQL Server Management Studio (SSMS) v17.0 的通用 (GA) 版本,因为您的计算机上安装了 SSMS 的预发布版本。从“添加/删除程序”中卸载 SSMS 的预发布版本' 在控制面板中重新运行 SSMS 安装程序。”

我卸载了预发布版本,但仍有问题。当我查看日志文件时,导致问题的条件是

[1118:18D4][2017-05-09T16:05:55]i052:条件'NOT RCBitsInstalled OR (RCBitsInstalled > "2016.140.17030.0" OR RCBitsInstalled < "2016.140evaluate.0.0")

但是进一步查看日志文件,该值似乎很好。

[1118:18D4][2017-05-09T16:05:55]i000:将版本变量“RCBitsInstalled”设置为值“2016.140.16000.64”

任何人都知道解决这个问题的方法吗?谢谢!

sql-server ssms

4
推荐指数
1
解决办法
2850
查看次数

很少更新和很多插入的索引方法

我正在使用带有 *pg_trgm* 扩展名的 Postgresql 9.1。我需要在基于文本的字段上创建索引。我不需要全文搜索,我使用ILIKE查询来进行搜索。

我会用pg_trgm,但不具有太多的经验gingist索引。我会有很多INSERT报表(每天约 15000 条)和很少的UPDATE报表(可能是一周内 1 条或 2 条)。

gin此类表上的索引的索引更新开销是多少?还是gist更合适?

postgresql index index-tuning gist-index gin-index

3
推荐指数
1
解决办法
844
查看次数

我可以为表和存储过程赋予相同的名称吗?

是否可以将存储过程命名为与表相同的名称?我有一个名为“buyers”的现有表,我正在尝试创建一个名为“buyers”的存储过程,但出现此错误:

数据库中已经有一个名为“buyers”的对象。

sql-server-2008 stored-procedures

3
推荐指数
1
解决办法
1万
查看次数

我应该使用强制转换或范围将日期时间加入日期吗?

这个问题是从这里提出的优秀问题中提取出来的:

迄今为止的演员阵容是可以讨论的,但这是一个好主意吗?

就我而言,我不关心该WHERE子句,而是关心加入具有类型列的事件表DATE

一个表有DATETIME2,另一个有DATE......所以我可以有效地JOIN使用aCAST( AS DATE)或者我可以使用“传统”范围查询(>=日期和<日期+1)。

我的问题是哪个更可取?这些DATETIME几乎永远不会与谓词DATE值匹配。

我希望保持在 200 万行DATETIME和 5000行以下DATE(如果这个考虑有所不同)

我是否应该期望在JOIN使用该WHERE子句时具有相同的行为?我应该更喜欢哪个通过缩放来保持性能?答案是否随 MSSQL 2012 而改变?

我的通用用例是将我的事件表视为日历表

SELECT
    events.columns
    ,SOME_AGGREGATIONS(tasks.column)
FROM
    events
LEFT OUTER JOIN
    tasks
        --This appropriately states my intent clearer
        ON CAST(tasks.datetimecolumn AS DATE) = events.datecolumn 
        --But is this more effective/scalable?
        --ON tasks.datetimecolumn >= events.datecolumn 
        --AND tasks.datetimecolumn < DATEADD(day,1,events.datecolumn)
GROUP BY
    events.columns
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008-r2 sql-server-2012 datetime

3
推荐指数
1
解决办法
3万
查看次数

更改列时会增加大量磁盘空间使用量

我希望这个问题对某人来说很容易回答:)

我有一个看起来像这样的表(隐藏了不重要的列)

CREATE TABLE [dbo].[Log](
    [LogID] [int] IDENTITY(1,1) NOT NULL,
    --several other columns
    [Name] [nvarchar](512) NOT NULL,
 CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
(
    [LogID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

现在我对该表做了一些索引,这也涉及将Name-column缩短到 256 宽度。但是当我更改此列时

ALTER TABLE Log ALTER COLUMN Name NVARCHAR(256) NOT NULL
GO
Run Code Online (Sandbox Code Playgroud)

数据库增长了一个不平凡的数量。(是的,我仔细检查了 - 这是我在这里所做的唯一更改)该表总共有 90746 个条目,在更改表之前,SSMS 表示大小为 247.56MB。

但是在这次更新之后,数据库增长到了 336.13MB。

不知道这在这里是否重要,但SELECT @@VERSION得到Microsoft SQL Server …

sql-server database-size alter-table disk-space auto-growth

3
推荐指数
1
解决办法
2373
查看次数

空白数据库的数据库架构很大。20MB

仅具有架构的空白数据库很大是否正常?或者有没有办法减少初始数据库的大小?

schema sql-server sql-server-2008-r2

3
推荐指数
1
解决办法
445
查看次数