我有一个关于触发器性能的问题。
CREATE TABLE [dbo].[_test](
[ID] [INT] IDENTITY(1,1) NOT NULL,
[Date] [DATETIME] NULL,
[DateYearID] [INT] NULL,
[DateQuarterID] [INT] NULL,
[Date1] [DATETIME] NULL,
[Date1YearID] [INT] NULL,
[Date1QuarterID] [INT] NULL)
Run Code Online (Sandbox Code Playgroud)
现在我想要触发器,如果我更新 Date 列(或插入新行),必须更新 DateYearID 和 DateQuarterID 列,如果我更新 Date1 列(或插入新行),则必须更新 Date1YearID 和 Date1QuarterID 列。有什么更好的,有一个触发器,比如
IF UPDATE(DATE)
UPDATE _test SET DateYearID = ... , DateQuarterID = ...
IF UPDATE (DATE1)
UPDATE _test SET Date1YearID = ... , Date1QuarterID = ...
Run Code Online (Sandbox Code Playgroud)
或者有两个不同的触发器,第一个更新 DateYearID,DateQuarterID 列,第二个更新 DateYear1ID,DateQuarter1ID 列。
我正在使用 SQL Server 2014。
非常感谢您的帮助。
我在服务器(X)上有一个 SQL Server 代理作业,它有一个步骤应该处理远程服务器(Y)上的数据立方体。
每当我运行该作业时,它都会失败并说 server(X) 无权处理 Cube 或它不存在。我相信我的作业设置正确,但是如何将服务器(Y)上的访问权限授予服务器(X)以处理多维数据集?下面是我正在使用的脚本。使用“SQL Server 分析服务命令”
<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400">
<Object>
<DatabaseID>Analysis Services Project1</DatabaseID>
<CubeID>S2E</CubeID>
</Object>
<Type>ProcessFull</Type>
<WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>
</Batch>
Run Code Online (Sandbox Code Playgroud)
当我通过对象资源管理器将服务器(x)添加到服务器(Y)上的管理员角色时,我无法通过检查名称按钮找到服务器。请帮忙。
我正在使用 SQL Server 2014
我想删除与一组特定数据库相关的所有作业。
因此,我已将所有名称添加到表变量中,并尝试生成脚本以删除作业。
我怎样才能做到这一点?
use msdb
go
DECLARE @R TABLE ( NAME VARCHAR(108) NOT NULL PRIMARY KEY CLUSTERED)
INSERT INTO @R(NAME)
SELECT
'UK15SUMMProduct' UNION ALL SELECT
'US15SUMMProduct' UNION ALL SELECT
'DE15SUMMProduct' UNION ALL SELECT
'AT15SUMMProduct' UNION ALL SELECT
'FR15SUMMProduct' UNION ALL SELECT
'EU15SUMMProduct' UNION ALL SELECT
'AU15SUMMProduct' UNION ALL SELECT
'UK15SUMSProduct' UNION ALL SELECT
'US15SUMSProduct' UNION ALL SELECT
'DE15SUMSProduct' UNION ALL SELECT
'AT15SUMSProduct' UNION ALL SELECT
'FR15SUMSProduct' UNION ALL SELECT
'EU15SUMSProduct' UNION ALL SELECT
'AU15SUMSProduct'
SELECT S.*
FROM SYSJOBS S
WHERE …Run Code Online (Sandbox Code Playgroud) sql-server sql-server-2008-r2 select sql-server-2012 sql-server-2014
我是数据库的新手,希望在我工作的小公司中安装数据库用于生产和最终其他用途。公司只有15名员工和三个部门。访问数据库的计算机不会超过五台。
目前的设置是一台运行 Windows Server 2012 r2 标准的物理域控制器/文件服务器。这是一个小仓库,里面有很多带有说明和图片的部件号,都在多本书中。办公室使用速记本和电子表格。
我的目标是让每个部门通过销售订单访问每个工作,这将提取与该部门相关的工作的所有项目说明、程序和规范,并最终跟踪生产和库存。
我将感谢任何帮助或指导,我知道有很多东西需要学习,但我愿意花时间在虚拟网络中构建它以进行测试。
基于小公司和小预算,我对如何使用以及使用什么数据库的想法。
使用 SQL Server Express 是因为它比 Access 拥有更多的存储空间,并且具有可扩展性、安全性和成本效益。这样对吗?
在域控制器上安装 SQL Server Express,因为它是一家小公司,成本效益更高且更简单。我不确定这是否正确,如果不建议这样做,我是否可以在域控制器上启用 Hyper V 并使用相同的产品密钥再次安装 server 2012,而不会出现许可问题,以便为数据库运行服务器。
如果需要更多信息,我会提供,我感谢任何建议和指导。
我是一名正在工作的学生,刚刚开始学习数据库设计课程,还有很长的路要走,但是当我尝试在现实世界的应用程序中构建某些东西时,我会学得更好。我愿意在虚拟网络中犯错,以便学习而不是在我公司的网络中。我相信我需要一个数据库导师。
提前致谢
我有一个查询,其中包含一个RANK() OVER函数,但我想在后面的 WHERE 子句中使用此列上显示的结果。我怎么写,因为我看过的所有其他问题都没有,RANK() OVER而且似乎更容易做到。这是声明:
USE SMSResults
SELECT Student_No,Result,Module_Name,Semester,Year,RANK() OVER (PARTITION BY Student_No ORDER BY Semester DESC) AS Rnk
FROM tbl_results
WHERE Student_No = '201409'
ORDER BY Year DESC
Run Code Online (Sandbox Code Playgroud)
我想使用子句中的Rnk列WHERE
我有一个程序可以显示丢失的索引。
它对我来说非常好,但它没有向我显示丢失的FILTERED INDEXES。
我希望我的程序能够捕获和建议过滤索引以及表索引,这可能吗?
这是我目前的程序:
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
BEGIN TRY
PRINT @@SERVERNAME
PRINT DB_NAME()
PRINT 'PROCEDURE sp_GetMissingIndexes'
DROP PROCEDURE sp_GetMissingIndexes
print 'dropped PROCEDURE sp_GetMissingIndexes'
END TRY
BEGIN CATCH
END CATCH
GO
CREATE PROCEDURE sp_GetMissingIndexes
@dbname SYSNAME = NULL
,@TableName SYSNAME = NULL
WITH ENCRYPTION
AS
/*
=======================================================================
Script : sp_GetMissingIndexes
Author : Marcelo Miorelli
Date : 15-dec-2014
Desc : get the list of missing indexes, database and table can be …Run Code Online (Sandbox Code Playgroud) 我有很多过程在创建它们时使用了WITH ENCRYPTION选项。
您可以在下面的图片中看到这一点,例如:
问题是当我想保存我以前版本的存储过程时,我无法得到预期的结果,如下图所示。
我备份存储过程代码的方式在下面的链接上: 如何备份存储过程的当前代码及其权限?
select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name
, 'Type' = per.state_desc, 'Permission' = per.permission_name
, 'Login' = pri.name, 'Type' = pri.type_desc
, *
From sys.procedures as p
left join sys.database_permissions as per on p.object_id = per.major_id
left join sys.database_principals as pri on per.grantee_principal_id = pri.principal_id
where ...
Run Code Online (Sandbox Code Playgroud)
有没有办法在保存之前从存储过程的代码中删除 WITH ENCRYPTION?
前提是我拥有该程序的所有权。
下面的链接上有一个几乎重复的问题 How to view an encrypted view or stored procedure
但是,在这个问题上,我拥有数据库。我是系统管理员。我可以使用任何资源,但我想要通过 T-SQL 的解决方案。
当谈论分区表和索引少于 100 个分区的表时,
没有未对齐的索引:
我的意思是:
非对齐索引
一个独立于其对应表分区的索引。
也就是说,索引具有不同的分区方案或放置在与基表不同的文件组中。
设计非对齐分区索引在以下情况下很有用:
基表尚未分区。
索引键是唯一的,不包含表的分区列。
您希望基表参与使用不同连接列的更多表的并置连接
是否还有其他性能缺陷:
1 - 减慢一些 DBCC 命令
2 - 在分区列以外的列上使用诸如 TOP 或 MAX/MIN 等运算符的查询可能会遇到分区性能降低的情况,因为必须评估所有分区。
3 -
使用分区消除的查询可能具有与大量分区相当或改进的性能。随着分区数量的增加,不使用分区消除的查询可能需要更长的时间来执行。
我正在使用具有许多跨数据库视图的数据库。虽然 INFORMATION_SCHEMA.VIEWS 列出了所有这些视图,但 INFORMATION_SCHEMA.VIEW_TABLE_USAGE 和 INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 没有。
所有有问题的视图都采用以下格式:
CREATE VIEW [dbo].[Invoice]
AS SELECT * FROM [otherdb].[dbo].[Invoice]
Run Code Online (Sandbox Code Playgroud)
以下查询返回 0 行:
SELECT
VIEW_CATALOG
,VIEW_SCHEMA
,VIEW_NAME
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE TABLE_CATALOG <> VIEW_CATALOG
Run Code Online (Sandbox Code Playgroud)
将 SELECT * 的适当性留给另一个讨论,为什么外部数据库引用不在 INFORMATION_SCHEMA 视图中,有什么方法可以获取它们?
在 StackOverflow 上的一个问题中,我发现了这个查询,它显示了当前数据库中所有表的表和列描述:
SELECT u.name + '.' + t.name AS [table],
td.value AS [table_desc],
c.name AS [column],
cd.value AS [column_desc]
FROM sysobjects t
INNER JOIN sysusers u
ON u.uid = t.uid
LEFT OUTER JOIN sys.extended_properties td
ON td.major_id = t.id
AND td.minor_id = 0
AND td.name = 'MS_Description'
INNER JOIN syscolumns c
ON c.id = t.id
LEFT OUTER JOIN sys.extended_properties cd
ON cd.major_id = c.id
AND cd.minor_id = c.colid
AND cd.name = 'MS_Description'
WHERE t.type = 'u'
ORDER BY t.name, …Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql-server-2014 ×10
dmv ×1
index ×1
partitioning ×1
performance ×1
select ×1
ssas ×1
t-sql ×1
trigger ×1