我一直在阅读 Kimberly Tripp 撰写的一些关于 SQL Server 计划缓存的精彩文章,例如:http : //www.sqlskills.com/blogs/kimberly/plan-cache-and-optimizing-for-adhoc-workloads/
为什么甚至有“针对临时工作负载进行优化”的选项?这不应该一直开着吗?无论开发人员是否使用 ad-hoc SQL,为什么不在每个支持它的实例上启用此选项(SQL 2008+),从而减少缓存膨胀?
鉴于以下存储过程,我能否在提供的附加WHERE条件下防止 SQL 注入?
CREATE PROCEDURE [dbo].[ProtectDynamicWhereClause]
(@TableName varchar(50),
@OldestRecordDate varchar(15),
@WhereCondition varchar(250) = NULL)
AS
BEGIN
-- Protect the table name from SQL Injection.
DECLARE @TableNameClean varchar(150) = QUOTENAME(@TableName)
DECLARE @sql nvarchar(4000)
SET @sql =
N'
SELECT * FROM ' + 'dbo.' + @TableNameClean
+ ' WHERE EntryAge > DATEDIFF(year, @OldestRecordDate, GETDATE()) '
IF (@WhereCondition IS NOT NULL)
BEGIN
SET @sql = @sql + ' AND ' + @WhereCondition
END
EXEC sp_executesql @sql, N'@TableNameClean varchar(50), @OldestRecordDate varchar(15)',
@TableNameClean …Run Code Online (Sandbox Code Playgroud) 在我的数据库中,我有一些重新编译的存储过程
我找到它们的方式是:
SELECT OBJECT_NAME(ID)AS SP_NAME,*
FROM SYSCOMMENTS
WHERE TEXT LIKE '%WITH RECOMPILE%'
Run Code Online (Sandbox Code Playgroud)
当我看:
select * from sys.procedures
Run Code Online (Sandbox Code Playgroud)
我发现没有重新编译的迹象。
有没有更好或更优雅的方法来找到重新编译存储过程?