小编Ada*_*Dev的帖子

在 SQL Server 2008 中使用 CONTAINS 创建存储过程

我想创建一个存储过程来使用 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一起工作?谢谢!

full-text-search stored-procedures sql-server-2008

5
推荐指数
2
解决办法
5452
查看次数

Microsoft SQL Server电子邮件验证

使用Microsoft SQL Server 2005及更高版本,我使用什么代码来验证电子邮件地址是否正确?
有电子邮件数据类型吗?
是否有电子邮件检查约束?
有电子邮件规则吗?
是否有电子邮件触发器?
是否有电子邮件验证存储过程?

sql-server sql-server-2005

5
推荐指数
1
解决办法
3688
查看次数

从 SQL Server 数据库中获取“下一行”并在单个事务中对其进行标记

我有一个用作队列的 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 完成此任务的最佳方法是什么?我记得有一次看到一条语句,它会删除行,同时将删除的行存入临时表,这样你就可以对它们做其他事情,但我现在一辈子都找不到它。

t-sql sql-server queue transactions

5
推荐指数
1
解决办法
2019
查看次数

用于UDF性能统计的MS SQL DMV - 如何查找前10个最差的UDF

我听说在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)

sql-server performance user-defined-functions dmv

5
推荐指数
1
解决办法
1541
查看次数

在sql中复制数据时添加列

我正在使用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 sqldatareader sqlbulkcopy sql-server-2008

4
推荐指数
1
解决办法
520
查看次数

Sql Optimization:Xml或Delimited String

希望这只是一个涉及性能优化的简单问题,当涉及到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来处理它?

xml sql sql-server-2008

4
推荐指数
1
解决办法
428
查看次数

sql server存储过程超时和查询没有超时,为什么?

我在sql server 2008上有一个存储过程,它除了一个int参数.它确实调用其他存储过程并具有嵌套的quires.

我面临的问题是,当我从SQL服务器管理工​​作室运行该程序时,它不执行并超时.

如果我在另一个SQL服务器管理工​​作室中单独运行存储过程中的查询,它只执行所有罚款.

我无法调试此问题.将深深感谢任何帮助/指点深入挖掘.

(我在执行proc或查询时使用相同的凭据)

提前致谢.

sql stored-procedures sql-server-2008

4
推荐指数
1
解决办法
1470
查看次数

查询的速度是否取决于表中的行数?

假设我有这个问题:

select * from table1 r where r.x = 5
Run Code Online (Sandbox Code Playgroud)

此查询的速度是否取决于存在的行数table1

sql database sql-server performance

4
推荐指数
1
解决办法
3648
查看次数

T-SQL-包括单个查询中的计数总和(*)

使用表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变量的总和.我知道如何使用单独的查询查找总和,但我想计算原始查询中的总和.

sql t-sql sql-server-2005

4
推荐指数
1
解决办法
6179
查看次数

SQL Server - 更新语句中的连接或子查询?

有没有理由在性能方面使用其中一个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 sql-server sql-server-2005 updates

3
推荐指数
1
解决办法
3761
查看次数