我正在尝试确定我有时在存储过程中遇到的问题。
我不得不说,存储过程在 select 子句中使用了 UDF(也许这就是问题的原因)但无论如何,不管它不是,下面是执行计划的一部分:
其中 Hash Match 的输出估计行数和非聚集索引 IX_Job_OperationID 上的 Index_Seek 估计值都是完全错误的:
我试图更新与索引 IX_Job_OperationID 相关的统计信息,即使使用 fullscan 选项,但它没有帮助。
UPDATE STATISTICS Job [IX_Job_OperationID] with fullscan
Run Code Online (Sandbox Code Playgroud)
我也在使用 recompile存储中选项,因为给定提供的参数,所涉及的数据集可能会发生很大变化。
有人能指出我正确的方向并帮助我理解为什么即使更新了统计数据,估计值与实际值相差甚远?
这里是实际执行计划的链接
该执行计划导致总共 8,610,665 次逻辑读取,而其他以某种方式选择的更好的计划可能约为 122,692
我一直在阅读有关所有触发器和过程的好处,除非您使用 DONE_IN_PROC,否则实现了“set nocount on”。
我有一个从更新触发器调用的标量值函数,用于计算多个表中的值的总和。
搜索 msdn 和过去的文章,我无法找到使用 set nocounton 的函数的明确示例。
包含或排除“set nocount on”对函数有什么影响?函数中是否有一点或代码异味应该表明添加了 set nocount on?
我有 3 张表正在使用Right Join。数据设置如下 - 我的问题是返回的数字不准确,因此当我执行查询时,我得到了返回(这是准确值的两倍和三倍)
vendor TotalSales TotalCases
Vendor 1 61.40 6
Run Code Online (Sandbox Code Playgroud)
但如果你手动计算它应该是
vendor TotalSales TotalCases
Vendor 1 30.70 2
Run Code Online (Sandbox Code Playgroud)
我必须在查询中更改哪些内容才能返回上述结果?
Declare @BBC Table
(
vendor varchar(250)
,vendorcasenum varchar(100)
,casenumdate date
)
Declare @AllVendor Table
(
vendor varchar(250)
)
Declare @TotalSalesAmt Table
(
vendor varchar(250)
,saleamt decimal(10,2)
)
Insert Into @TotalSalesAmt (vendor, saleamt) VALUES
('Vendor 1', '10.20'), ('Vendor 2', '10.10'), ('Vendor 1', '.40')
,('Vendor 1', '20.10'), ('Vendor 2', '20.10'), ('Vendor 3', '20.00')
Insert Into @AllVendor (vendor) Values …Run Code Online (Sandbox Code Playgroud) 我们有一个表格,其中存储了一大串文本,其中包含一个借记卡号码,该文本串是从客户发送的电子邮件中复制粘贴的。
如何搜索 7000 多条记录并识别/替换从0000-0000-0000-0000到的卡号XXXX-XXXX-XXXX-0000?
我想从一个名为 Orders 的表中计算几个订单日期之间的平均天数。对于每个 CustomerID,订单之间的平均天数是多少。示例表如下(img):
CREATE TABLE #Orders(CustomerID int, OrderDate datetime);
INSERT #Orders(CustomerID, OrderDate) VALUES
(100,'20170114'),(100,'20170123'),(100,'20170129'),
(101,'20170202'),(101,'20170212');
Run Code Online (Sandbox Code Playgroud)
我试过这个查询:
SELECT CustomerID, AVG(OrderDate - PriorDate)
FROM (SELECT CustomerID, OrderDate
, LAG(OrderDate) OVER (PARTITION BY CustomerID ORDER BY OrderDate) as PriorDate
FROM #Orders where CustomerID = 100)
Run Code Online (Sandbox Code Playgroud)
但是,这会产生:
消息 102,级别 15,状态 1
')' 附近的语法不正确。
我需要登录触发器。我需要从 Excel Pivot 文件中捕获进入 SQL Server 的 SQL 查询。
目前我正在使用以下代码:
CREATE TRIGGER [MyLogonTrigger] ON ALL SERVER FOR LOGON
AS
BEGIN
IF PROGRAM_NAME() <> 'Microsoft%'
DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = @@spid
DECLARE @SQLQuery varchar(MAX)
set @SQLQuery = (select TEXT
FROM sys.dm_exec_sql_text(@sqltext))
INSERT INTO TestDatabase.dbo.LogonAudit
(
... audit columns ...
)
Select
SUSER_SNAME()
,GETDATE()
,@@SPID
,PROGRAM_NAME()
,ORIGINAL_DB_NAME()
,HOST_NAME()
,client_net_address
,@SQLQuery
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
END;
Run Code Online (Sandbox Code Playgroud)
我面临的问题是@SQLQuery每次都是创建触发器定义代码,而不是刷新数据透视表时从 Excel 文件传递给 SQL 的实际查询。
我认为这与登录和实际选择查询执行发生在两个不同的事务(SPID)上有关。 …
我看过很多关于如何创建表值参数的教程 - 但是如何在创建表值参数后查看它?
我更喜欢在 SSMS 中使用 GUI 的方法,但 T-SQL 也足够了。
我们目前有一个 oninsert() 触发器设置,每次将行插入到表中时,都会触发更新查询以更新 3 个字段。这些字段是一个简单的计算,例如
field1update = (amt/12)*14
field2update = (amt/12)*16
field3update = (amt/12)*18
Run Code Online (Sandbox Code Playgroud)
触发器是足够的,但它有时会锁定该行,因此暂时无法立即访问它。我的问题是,如果将这些字段转换为(请原谅我的无知)计算列或计算列,我们会看到性能改进吗?
通常这是一个电子表格导入,一次插入大约 20,000 - 25,000 行。
performance sql-server t-sql sql-server-2008-r2 performance-tuning
我正在尝试添加schemabinding到 SQL Server 2008 中的视图,但出现错误
模式绑定对象中不允许使用语法“Openrowset/Openquery/Opendatasource”。
我使用Openquery是因为我正在查询链接服务器,这是我必须查询的方式。有解决方法吗?
这是我用我的观点尝试的语法
Create View dbo.Test
With Schemabinding
As
Select * FROM OPENQUERY(191.183.18.101, 'Select * from ls1prod.hrinfo')
Go
Run Code Online (Sandbox Code Playgroud) 我在不应该插入的表中插入了一些数据。我正在尝试删除数据,但它具有 1:M 关系,我还需要删除引用此数据的数据。
我不想改变表/索引,我只需要这个指令来级联:
-- this alters the CONSTRAINT -- not an option:
ALTER TABLE T2
ADD CONSTRAINT fk_employee
FOREIGN KEY (employeeID)
REFERENCES T1 (employeeID)
ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)
此外,我希望(阅读 -更喜欢)不要更改 IDE GUI 设置。
t-sql ×10
sql-server ×9
cascade ×1
functions ×1
index ×1
performance ×1
schema ×1
statistics ×1