标签: sql-server

如何从 table1 上的触发器将值插入 table2

我有 2 个带有列名的表WHO,我正在使用这 2 个表创建一个视图,其中FSwho.who = FStasks.who.

如果我在FStaskswhere 中输入一条新记录FStasks.who = LIZ,但我的FSwho.who表上没有记录,那么触发器应该插入LIZ到我的表中。

使用下面的代码,我得到的错误是

无法绑定多部分标识符“fs_tasks.WHO”。(我也试过inserted.who

我搜索了互联网,我遇到的大多数解决方案都是关于更改同一张桌子上的值。如何将值插入到完全不同的表中?

ALTER TRIGGER [dbo].[FS_TASKS_TRIG]
   ON  [dbo].[FS_TASKS]
   AFTER INSERT,UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

DECLARE @Action as char(1);
    SET @Action = (CASE 
        WHEN EXISTS(SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED) THEN 'U'  -- Set Action to Updated.
        WHEN EXISTS(SELECT * FROM INSERTED) THEN 'I'  -- Set Action to Insert.
        WHEN EXISTS(SELECT * …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

浏览时 SSAS 层次结构重复

多维数据集中的维度为我们提供了重复项,处理多维数据集时没有错误,但是在浏览多维数据集时我们可以看到重复项。

我们的维度中有一个层次结构,层次结构像Country -- State -- Area.

在 DB 中,维度数据如下所示。

+---------+------------+-----------+
| Country |   State    |  Subarea  |
+---------+------------+-----------+
| India   | Karnataka  | Bangalore |
| India   | Telangana  | Hyderabad |
+---------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)

现在,当使用属性 Country 浏览多维数据集时,我们会看到 country 下的 2 个成员为“India”,当针对该属性选择度量时,销售额在这两个值之间破碎。

我们可以做任何工作来避免这个问题吗?

sql-server ssas dimensional-modeling

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

SQL Server 2016 插件不起作用

最近我在我的 PC 上安装了 SQL Server 2016。

这是我的服务器的详细信息:

Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64)
2016 年 3 月 10 日 16:49:45
版权所有 (c)
Windows 10 Pro 6.3(内部版本10586:)上的Microsoft Corporation企业评估版(64 位)

在我的 PC 上安装服务器后,尝试安装以下插件

  1. 适用于 SSMS V3.6.1 的 SQL 漂亮打印机插件
  2. SQLSentry 计划浏览器

问题:

  1. SQL Pretty Printer甚至没有安装它会抛出错误,例如

    在此处输入图片说明

    但是SQL Pretty Printer站点说它适用于 SQL Server 2016,您可以查看链接。

    在此处输入图片说明

  2. 下一个SQLSentry 计划资源管理器已成功安装,但插件未显示在SSMS.

版本: v2.8(内部版本 9.0.9252.0)

在此处输入图片说明

谁能帮我解决这个问题。请注意,两者都在 SQL Server 2014 中完美运行。

sql-server ssms plugins sql-server-2016 windows-10

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

拒绝用户在 master 中创建表的权限

我注意到我可以在master数据库中创建表、模式、存储过程等。

我不知道是什么授予此权限。这很烦人,因为当我们在 SSMS 中打开一个 *.sql 文件时,它默认与master 相关。如果在CREATE没有注意到并设置正确的数据库上下文的情况下执行操作,则在master 中创建表。

如果我们没有权限,我们会得到一个错误,注意到它并更改数据库上下文。有了权限,表就创建好了,后面我们才看到错误,需要删除重新创建。我注意到在master中已经错误地创建了一些表。

我想撤销每个人类用户的许可,但我害怕破坏某些东西。我不知道某些 SQL Server 例程是否需要在那里创建的权限。

在不破坏 SQL Server 的情况下从master撤销创建权限的最佳方法是什么?

security sql-server permissions sql-server-2012 master-system-database

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

是否可以仅在订阅者中更改表的主键(从非集群到集群)而不破坏复制?

我有一个表,它有一个聚集唯一索引和一个与索引结构相同的非聚集主键。

IF OBJECT_ID('[dbo].[tblBAccountHolder]') IS NOT NULL 
DROP TABLE [dbo].[tblBAccountHolder] 
GO
CREATE TABLE [dbo].[tblBAccountHolder] ( 
[lngParticipantID]  INT                              NOT NULL,
[sdtmCreated]       SMALLDATETIME                    NOT NULL,
[strUsername]       VARCHAR(20)                          NULL,
[strPassword]       VARCHAR(20)                          NULL,
[tsRowVersion]      TIMESTAMP                        NOT NULL,
CONSTRAINT   [PK_tblAccountHolder]  
PRIMARY KEY NONCLUSTERED ([lngParticipantID] asc),

CONSTRAINT   [IX_tblBAccountHolder__lngParticipantID]  
UNIQUE CLUSTERED    ([lngParticipantID] asc) 
WITH FILLFACTOR = 100)
Run Code Online (Sandbox Code Playgroud)

正如您在定义中看到的那样,只有一列:

 CREATE  UNIQUE CLUSTERED INDEX IX_tblBAccountHolder__lngParticipantID 
 ON [dbo].[tblBAccountHolder] (  [lngParticipantID] ASC  )  
Run Code Online (Sandbox Code Playgroud)

我想删除唯一索引,并更改主键以使其成为集群。我将保留相同的主键,只需将其从非集群更改为集群。

该表是事务复制的一部分,我只会在订阅者数据库上完成此操作。不在发布者中。

这是一个包含超过 9,293,193 行的表格。

我会搞砸复制吗?

问题是我必须删除主键约束并将其重新创建为集群。

这是我想在订阅者数据库中完成的操作:

drop INDEX IX_tblBAccountHolder__lngParticipantID 
        ON [dbo].[tblBAccountHolder]  
GO

ALTER TABLE [dbo].[tblBAccountHolder] 
       drop CONSTRAINT …
Run Code Online (Sandbox Code Playgroud)

replication sql-server transactional-replication sql-server-2014 automation

1
推荐指数
2
解决办法
4455
查看次数

排除所有匹配的行

我有一个表,其中有唯一的 ID、姓名、电子邮件和其他一些字段。我想将此表与电子邮件上的另一个表进行匹配,但有时电子邮件是共享的。唯一的ID不在表之间共享,但是当我识别它们时,我会将ID输入到另一个表中。名称并不唯一。

我想建立两轮连接。第一轮我想匹配电子邮件并附加 ID,第二轮将匹配 ID 并根据需要更新字段。

有没有办法查询表并仅获取那些具有唯一电子邮件的数据,而忽略那些共享电子邮件的数据?然后,我可以附加 ID 并重新查询那些没有 ID 的内容并加入名称。这还能用吗?

这是分区的一个很好的用途吗?我不太明白这些。

sql-server duplication

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

大表连接的 OrderBy int 慢

我有大约 150 万条记录。此查询适用于较小的数据,但每几十万条记录就会慢一秒。对于 150 万,查询明显困难。

我模拟了一个全新的 Code First 项目来验证问题与我的实现无关,并提供以下示例查询:

    SELECT TOP 1 Widgets.*
    FROM [WidgetSandbox].[dbo].[Widgets] Widgets
    INNER JOIN [WidgetSandbox].[dbo].[Status] Statuses ON Widgets.StatusId = Statuses.Id
    INNER JOIN [WidgetSandbox].[dbo].[Colors] Colors ON Widgets.ColorCode = Colors.ColorCode
    INNER JOIN [WidgetSandbox].[dbo].[Sizes] Sizes ON Widgets.SizeId = Sizes.Id
    WHERE Statuses.Name = 'Available'
    AND Colors.Name = 'Red'
    ORDER BY Sizes.DiameterInches
Run Code Online (Sandbox Code Playgroud)

DiameterInches 是一个int, 作为我实际代码中“PriorityLevel”的隐喻。

如果我注释掉ORDER BY Sizes.DiameterInches,它会立即返回,但如果我想找到“最小的可用红色小部件”,它就会爬行。

有没有更好的办法?

在此处输入图片说明

执行计划 XML:https : //gist.github.com/RobertBaldini/57c8b61d135cc5c84c38b2da243611ad

DDL:https : //gist.github.com/RobertBaldini/3740c7bb85eea47d7fe63cb8602ac2d6

回购(数据加载器需要几分钟):https : //github.com/RobertBaldini/WidgetSandbox

performance sql-server execution-plan query-performance

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

备份错误消息 3201,级别 16,状态 1,第 1 行和操作系统错误 3

当我在网络共享驱动器中进行备份时,下面提到了 TSQL。

Use DatabaseName
Go
Backup Database DatabaseName
To Disk=N'H:\DatabaseBackup\DatabaseName.bak';
Go
Run Code Online (Sandbox Code Playgroud)

我在 SSMS 中收到以下错误。

 Msg 3201, Level 16, State 1, Line 1
Run Code Online (Sandbox Code Playgroud)

无法打开备份设备'H:\DatabaseBackup\DatabaseName.bak'操作系统错误 3(系统找不到指定的路径。)。

Msg 3013, Level 16, State 1, Line 1
Run Code Online (Sandbox Code Playgroud)

BACKUP DATABASE 异常终止。

因为我已经通过这个 TSQL 检查了 'xp_cmdshell' 。run_value & config_value 如下:

name       minimum  maximum config_value    run_value
xp_cmdshell 0           1     1               1
Run Code Online (Sandbox Code Playgroud)

注意:这里H是我的网络共享。

任何建议将不胜感激。

sql-server backup sql-server-2012

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

如果在select语句中不为空,如何替换列?

我有一个联系人(ID、名字、姓氏、中间名)。

例如:

| ID | FirstName | LastName | MiddleName |
|====|===========|==========|============|
| 1  | Mark      |Jordan    | E          |
|----|-----------|----------|------------|
| 2  | James     | Blunt    | NULL       | 
|----|-----------|----------|------------|
Run Code Online (Sandbox Code Playgroud)

我要输出

Mark E. Jordan
James Blunt
Run Code Online (Sandbox Code Playgroud)

因此,如果 MiddleName 不为空,则添加一个 '.' 之后,否则输出空值。

我知道isnull函数,但是我需要的是isnotnull函数。如何完成查询?

到目前为止我的查询:

select FirstName + ' ' + isnull(...)  + LastName
from Contact
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql functions

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

限制记录数取决于主键的部分

我为足球比赛创建了数据库。

我有 2 个具有多对多关系的表,因此我还创建了一个连接表:

裁判

CREATE TABLE referee (
  id_referee INT IDENTITY PRIMARY KEY,
  id_type_referee INT NOT NULL,
  first_name varchar(20) NOT NULL,
  last_name varchar(30) NOT NULL,
  date_of_birth DATE NOT NULL,
  FOREIGN KEY(id_type_referee) REFERENCES type_referee(id_type_referee)
);
Run Code Online (Sandbox Code Playgroud)

比赛

CREATE TABLE match (
  id_match INT IDENTITY PRIMARY KEY,
  id_stadium INT NOT NULL REFERENCES stadium(id_stadium),
  id_season INT NOT NULL REFERENCES season(id_season),
  date_of_match DATE NOT NULL,
  audience INT CHECK (audience>=0)
);
Run Code Online (Sandbox Code Playgroud)

接线台

CREATE TABLE match_referee(
  id_referee INT NOT NULL,
  id_match INT NOT NULL,
  PRIMARY KEY(id_referee,id_match), …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server constraint

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