如何找出具有精确模式的两个表之间的数据差异,以及如何生成同步 SQL 以获得联合结果(无重复)?
这是2个表:
SOURCE01.dbo.Customers (31,022 rows)
TARGET01.dbo.Customers (29,300 rows)
每个表的架构是:
[CustomerId] : nvarchar(255)[CustomerSerializedProfile]: nvarchar(max)[CreatedDatetime] : DateTime给定以下常量:
给定这些常量,SQL Server 是否总是为给定的查询生成相同的计划?
如果没有,是否还有其他考虑?是否还需要考虑不确定性因素?
我正在尝试两种方法来显示具有特定名称的列:
INFORMATION_SCHEMA.COLUMNS
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='SUPPLIER_NAME';
Run Code Online (Sandbox Code Playgroud)系统列
SELECT *
FROM SYS.COLUMNS
WHERE NAME='SUPPLIER_NAME'
Run Code Online (Sandbox Code Playgroud)为什么查询显示不同的输出?
SQL Server 2008 SP3
如何追踪这些超时错误?

错误显示在专门用于 IIS 中的错误报告的 Intranet 仪表板上。我怀疑 Web 应用程序中的默认超时时间为 30 秒,如果查询时间超过 30 秒,则会引发异常。由于在这些 SQL 服务器上有许多查询需要超过 30 秒的时间,因此我不能仅根据持续时间在探查器中进行过滤。
为这个仪表板监控的网站提供服务的是两台 IIS 服务器,它们从七个 SQL Server 实例中检索数据。
我可以使用“用户错误消息事件”和“OLEDB 错误事件”来跟踪 SQL Server Profiler 中的这些错误吗?
可以将“Lock Pages in Memory”权限授予 SQL Server 使用的服务帐户。这允许 SQL Server 防止内存被分页到磁盘。
我注意到我们的一些 SQL Server 机器没有配置本地策略来为 SQL Server 使用的服务帐户允许此权限。由于我们拥有大量服务器,因此使用“本地系统策略”管理控制台手动检查每台服务器至多是乏味的。
是否有 T-SQL 查询、扩展存储过程或其他一些我可以用来确定有问题的服务器是否正确的方法?
我不想使用,EXEC xp_readerrorlog 0, 1, 'lock memory privilege was not granted';因为它依赖于检查当前的 SQL Server 错误日志;并且该错误日志可能不包含相关条目,假设自服务器上次重新启动以来日志已被翻转。我意识到我可以通过修改第一个参数0to1等来检查旧日志,但是我们只保留 10 个错误日志,这可能还不够。我想要一种确认设置的故障安全方式。
我有一个始终处于高可用性模式的数据库与不同实例上的另一个数据库同步。如何.bak使用将文件从文件还原到主数据库T-SQL?
我是高可用性的新手,有人建议我需要先将数据库从高可用性中移除,然后才能进行还原,然后再次将其恢复为高可用性,但我不确定。
我希望我可以在AlwaysOn仍然启用的情况下直接恢复到主服务器,并且它会自动与辅助服务器同步。
sql-server t-sql restore sql-server-2012 availability-groups
在设置审计跟踪时,跟踪谁在表中更新或插入记录没有问题,但是,跟踪谁删除记录似乎更成问题。
我可以通过在插入/更新字段中包含“UpdatedBy”来跟踪插入/更新。这允许 INSERT/UPDATE 触发器通过inserted.UpdatedBy. 但是,使用删除触发器不会插入/更新数据。有没有办法将信息传递给删除触发器,以便它知道谁删除了记录?
这是一个插入/更新触发器
ALTER TRIGGER [dbo].[trg_MyTable_InsertUpdate]
ON [dbo].[MyTable]
FOR INSERT, UPDATE
AS
INSERT INTO AuditTable (IdOfRecordedAffected, UserWhoMadeChanges)
VALUES (inserted.ID, inserted.LastUpdatedBy)
FROM inserted
Run Code Online (Sandbox Code Playgroud)
使用 SQL Server 2012
是否可以通过在引用它的所有外键之间级联更新来更新主键列值?
# EDIT 1: 当我运行 followinq 查询
select * from sys.foreign_keys where referenced_object_id=OBJECT_ID('myTable')
Run Code Online (Sandbox Code Playgroud)
,我看到 update_referential_action 设置为 0。因此更新我的主键列后没有采取任何操作。如何更新外键以使其ON CASCADE UPDATE?
# EDIT 2:
为了编写或删除架构中所有外键的脚本,请运行以下脚本(取自此处)
DECLARE @schema_name sysname;
DECLARE @table_name sysname;
DECLARE @constraint_name sysname;
DECLARE @constraint_object_id int;
DECLARE @referenced_object_name sysname;
DECLARE @is_disabled bit;
DECLARE @is_not_for_replication bit;
DECLARE @is_not_trusted bit;
DECLARE @delete_referential_action tinyint;
DECLARE @update_referential_action tinyint;
DECLARE @tsql nvarchar(4000);
DECLARE @tsql2 nvarchar(4000);
DECLARE @fkCol sysname;
DECLARE @pkCol sysname;
DECLARE @col1 bit;
DECLARE @action char(6);
DECLARE @referenced_schema_name sysname;
DECLARE FKcursor …Run Code Online (Sandbox Code Playgroud) sql-server-2008 foreign-key sql-server referential-integrity update
我正在考虑一种情况,我有两个高密度的列,但这些列不是独立的。
这是我为测试目的而创建的表的定义。
CREATE TABLE [dbo].[StatsTest](
[col1] [int] NOT NULL, --can take values 1 and 2 only
[col2] [int] NOT NULL, --can take integer values from 1 to 4 only
[col3] [int] NOT NULL, --integer. it has not relevance just to ensure that each row is different
[col4] AS ((10)*[col1]+[col2]) --a computed column ensuring that if two rows have different values in col1 or col2 have different values in col4
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
实验数据如下
col1 col2 col3 col4
1 …Run Code Online (Sandbox Code Playgroud) replication sql-server-2005 sql-server merge-replication transactional-replication
sql-server ×10
audit ×1
connectivity ×1
determinism ×1
foreign-key ×1
replication ×1
restore ×1
statistics ×1
t-sql ×1
trigger ×1
update ×1