我想创建一个存储过程来使用 CONTAINS 进行一些组合关键字搜索,如下所示:
SELECT theContent
FROM FtsTest
WHERE CONTAINS
(theContent,
' FORMSOF (INFLECTIONAL, keyword1) AND FORMSOF (INFLECTIONAL, keyword2)');
Run Code Online (Sandbox Code Playgroud)
并且他的关键字数量可能会有所不同,因此我尝试将整个“FORMSOF... AND FORMSOF .....”子句作为参数传递,将参数声明为 nvarchar(max),但它不会让我这样做它,说参数类型“nvarchar(max)”对于“CONTAINS”的参数 2 无效。
那么,有没有办法让它与sp一起工作?谢谢!
使用Microsoft SQL Server 2005及更高版本,我使用什么代码来验证电子邮件地址是否正确?
有电子邮件数据类型吗?
是否有电子邮件检查约束?
有电子邮件规则吗?
是否有电子邮件触发器?
是否有电子邮件验证存储过程?
我有一个用作队列的 SQL Server 表,它正在由多线程(很快将成为多服务器)应用程序处理。我想要一种让进程从队列中声明下一行的方法,将其标记为“进程中”,而不会有多个线程(或多个服务器)同时声明同一行的可能性。
有没有办法更新一行中的标志并同时检索该行?我想要这样的伪代码,但理想情况下,不要阻塞整个表:
Block the table to prevent others from reading
Grab the next ID in the queue
Update the row of that item with a "claimed" flag (or whatever)
Release the lock and let other threads repeat the process
Run Code Online (Sandbox Code Playgroud)
使用 T-SQL 完成此任务的最佳方法是什么?我记得有一次看到一条语句,它会删除行,同时将删除的行存入临时表,这样你就可以对它们做其他事情,但我现在一辈子都找不到它。
我听说在Microsoft SQL Server中有多种方法可以找到"最差"的存储过程:执行次数,CPU工作时间,队列等待时间等.
我正在寻找一种方法来找到最差(最慢/最常用)的UDF - 是否有DMV查询?
例如,来自将使您成为超级英雄的五个DMV查询的此查询按总工作时间返回前25个缓存的SP,这实际上意味着CPU压力的最昂贵的存储过程.
我如何为UDF写这样的东西?
SELECT TOP(25) p.name AS [SP Name], qs.total_worker_time AS [TotalWorkerTime],
qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.execution_count,
ISNULL(qs.execution_count/DATEDIFF(Second, qs.cached_time, GETDATE()), 0) AS [Calls/Second],
qs.total_elapsed_time, qs.total_elapsed_time/qs.execution_count
AS [avg_elapsed_time], qs.cached_time
FROM sys.procedures AS p
INNER JOIN sys.dm_exec_procedure_stats AS qs
ON p.[object_id] = qs.[object_id]
WHERE qs.database_id = DB_ID()
ORDER BY qs.total_worker_time DESC OPTION (RECOMPILE);
Run Code Online (Sandbox Code Playgroud) 我正在使用SqlBulkCopy将一些表中的一些记录批量插入到另一个表中.该查询使用SqlDataReader来获取数据.表之间的一个重要区别(除了在映射中处理的列顺序之外)是目标表具有日期列,需要在该日期列中添加当前日期.此日期不在源表中.如何将此添加到当前正常工作的流程中减去此项?
当前的工作代码如下所示:
SqlCommand cmd = new SqlCommand("SELECT * from dbo.source", cn);
SqlDataReader rdr = cmd.ExecuteReader();
using (SqlBulkCopy copy = new SqlBulkCopy(cn))
{
copy.ColumnMappings.Add(0, 0);
copy.ColumnMappings.Add(1, 2);
copy.ColumnMappings.Add(3, 3);
copy.ColumnMappings.Add(2, 4);
copy.ColumnMappings.Add(5, 5);
copy.ColumnMappings.Add(14, 6);
copy.DestinationTableName = "destination";
copy.WriteToServer(rdr);
}
Run Code Online (Sandbox Code Playgroud)
DB是sql 2008 ENT.
希望这只是一个涉及性能优化的简单问题,当涉及到Sql 2008中的查询时.
我曾为那些使用Stored Procs进行ETL过程以及他们的一些网站的公司工作过.我已经看到了他们需要根据一组有限的键值检索特定记录的场景.我已经看到它以3种不同的方式处理,通过下面的伪代码说明.
动态Sql,用于连接字符串并执行它.
EXEC('SELECT * FROM TableX WHERE xId IN (' + @Parameter + ')'
Run Code Online (Sandbox Code Playgroud)
使用用户定义的函数将分隔的字符串拆分为表
SELECT * FROM TableY INNER JOIN SPLIT(@Parameter) ON yID = splitId
Run Code Online (Sandbox Code Playgroud)
使用XML作为参数而不是分隔的varchar值
SELECT * FROM TableZ JOIN @Parameter.Nodes(xpath) AS x (y) ON ...
Run Code Online (Sandbox Code Playgroud)
虽然我知道在第一个片段中创建动态sql是一个坏主意,但有很多原因,我的好奇心来自最后两个例子.在我的代码中进行尽职调查以通过XML传递此类列表(如代码段3)是否更为熟练,还是更好地分隔值并使用udf来处理它?
我在sql server 2008上有一个存储过程,它除了一个int参数.它确实调用其他存储过程并具有嵌套的quires.
我面临的问题是,当我从SQL服务器管理工作室运行该程序时,它不执行并超时.
如果我在另一个SQL服务器管理工作室中单独运行存储过程中的查询,它只执行所有罚款.
我无法调试此问题.将深深感谢任何帮助/指点深入挖掘.
(我在执行proc或查询时使用相同的凭据)
提前致谢.
假设我有这个问题:
select * from table1 r where r.x = 5
Run Code Online (Sandbox Code Playgroud)
此查询的速度是否取决于存在的行数table1?
使用表i和字段date_entered和代码,我写了一个查询来列出每年代码='12A'的计数.
select distinct year(date_entered) as Yr, count(*) as Cnt
from i
where code = '12A'
group by year(date_entered)
order by Yr desc
Run Code Online (Sandbox Code Playgroud)
这会产生:
Yr | Cnt
2011 | 780
2010 | 3489
2009 | 3256
...
Run Code Online (Sandbox Code Playgroud)
我想在结果集中包含Cnt变量的总和.我知道如何使用单独的查询查找总和,但我想计算原始查询中的总和.
有没有理由在性能方面使用其中一个UPDATE语句而不是另一个语句?
UPDATE myTable
SET fieldx = 1
FROM myTable AS mt
, myView AS mv
WHERE mt.id = mv.id
UPDATE myTable
SET fieldx = 1
WHERE id IN ( SELECT id
FROM myView )
Run Code Online (Sandbox Code Playgroud) sql ×6
sql-server ×5
performance ×2
t-sql ×2
database ×1
dmv ×1
queue ×1
sqlbulkcopy ×1
transactions ×1
updates ×1
xml ×1