有没有更好的方法在SQL服务器中进行分页?
例如,我必须使用以下技术将@skip添加到@take:
;WITH tmp_cte AS (
SELECT ROW_NUMBER() OVER (ORDER BY LastName) AS RowNumber,
LastName,
FirstName
FROM person.Person
WHERE FirstName like '%ad%'
)
SELECT *
FROM tmp_cte
WHERE RowNumber > @skip --10
AND RowNumber <= @Take--20
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法,以便我不必添加跳过?
我使用SQL Server 2012并在我的数据库中有一个表,其中包含10行,通常在sql server profiler中没有查询.但是当我dm_db_index_usage_stats用于索引的调查使用时,该表的主键索引具有高user_update和user_seek.
我不知道为什么这个索引有很高的更新和寻求.
此未使用表的平均更新大约是每分钟1000次更新.
编辑
此表没有与另一个表的任何外键,并且没有任何依赖项.
我认为这个问题是sql server中的一个bug.
编辑2
当我删除并重新创建此表并再次在其上插入数据时,此表的索引使用情况不会更改.
我想也许存在一些像这样的表(没有用法,并且有索引更新和索引查找).
编辑3
我在这个表上写了一个更新后的触发器,并将更新的记录保存到另一个表(JohnLBevan suggest)但不要在新表上插入任何记录,这意味着该触发器不会运行.但索引user_seek和索引user_update仍然改变.我坚信这个问题是SQL Server中的一个错误.但我不知道这些更新和寻求对性能有效.
编辑4
我使用下面的代码来获取索引用法:
SELECT *
From
(SELECT DB_NAME(ddius.database_id)AS DatabaseName, OBJECT_NAME(ddius.object_id) AS object_name ,
CASE
WHEN ( SUM(user_updates + user_seeks + user_scans + user_lookups) = 0 )
THEN NULL
ELSE ( CAST(SUM(user_seeks + user_scans + user_lookups) AS DECIMAL)
/ CAST(SUM(user_updates + user_seeks + user_scans
+ user_lookups) AS DECIMAL) )
END AS RatioOfReads ,
CASE …Run Code Online (Sandbox Code Playgroud) 我正在尝试测试变量是否为null但我似乎有语法错误,我的代码是:
DECLARE @count1 INT
SET @count1 =
(SELECT HPlayedHome FROM League WHERE GameID =
(SELECT TOP 1 GameID From Goals WHERE Date <= '20130923' AND Home = 'Palermo'
AND (GameID >=2551 AND GameId <= 5100) ORDER BY Date Desc))
SELECT CASE @count1 IS NULL THEN 0 ELSE @count1 END
Run Code Online (Sandbox Code Playgroud)
我希望查询返回@ count1的值,但如果它的NULL返回0. SQL SERVER 2012突出显示IS上的语法错误,'IS附近的语法不正确'.
假设我有两张这样的桌子

现在我想要做正确的加入Menu_Table有Menu_access_Table.
我想从中获取所有行Menu_Table.
SELECT
*
FROM
Menu_Table
RIGHT JOIN
Menu_Access_Table ON Menu_Table.menu_id = Menu_Access_Table.menu_id
WHERE
Menu_Access_Table.user_id=11
Run Code Online (Sandbox Code Playgroud)
如果user_id=11我下面没有条目,我仍然希望从中获取所有行Menu_Table!可能吗?我正在使用SQL Server 2012.
我们正在设计一个数据库,需要在表格中存储各种版本的文件(pdf/image /缩小图像).由于某种原因选择使用Filestream的权力,所以这不是辩论.
我似乎无法在网上找到任何指示用于存储pdf和图像数据的适当数据类型的内容.那个或者我在寻找它时只是一个完全白痴.
我不打算开始辩论,所以我不是在寻找自以为是的回答.但是我试图找出一个或另一个是否真的是为我想做的事而设计的.如果其中任何一个都有用,那就是我需要知道的.
我有以下SQL Server 2012表:
create table dbo.Packs {
Id int identity not null,
Info nvarchar (200) not null
}
Run Code Online (Sandbox Code Playgroud)
如何获取Info以"File"开头的所有行...我可能有:
"File #200 View", "File #100 Delete", "Stat F#20"
Run Code Online (Sandbox Code Playgroud)
所以我会得到前两个记录.
谢谢你,米格尔
我从视图中选择了行(视图中的where子句在静态数据上).如果我运行下面的SQL,我每次都会得到相同的结果.我希望recordsIds是相同的,并且顺序相同,但它们完全不同!
我正在使用SQL SEVER 2012.谁能解释为什么这个结果有所不同?

如何提取文件名前面的文件路径的文件夹名称?
例:
declare @a varchar(200)
set @a = '/path/to/category1/filename.txt'
select right(@a, charindex('/', reverse(@a)) - 1)
Run Code Online (Sandbox Code Playgroud)
这将返回filename.txt - 在另一列中,我现在想要获取"category1"文件夹名称.如果路径更改为:
set @b = '/path/to/another/folder/category2/filename.txt'
它应提取category2.
---------------------
| ID | date |
|-----+-------------|
| 1 | 2013-12-30 |
| 2 | 2014-01-03 |
| 3 | 2014-02-02 |
---------------------
Run Code Online (Sandbox Code Playgroud)
列ID是int类型
列date是Date类型
当我使用时SELECT CAST (getdate() as date) currentDay, ID FROM table WHERE date >= GETDATE(),它只返回:
--------------------------------------
| currentDay | ID | date |
|---------------+------+-------------|
| 2013-12-30 | 2 | 2014-01-03 |
| 2013-12-30 | 3 | 2014-02-02 |
--------------------------------------
Run Code Online (Sandbox Code Playgroud)
它没有返回行ID=1.
换句话说,>=GETDATE()不返回具有今天日期的行.
我做错了什么?
我有一个带参数@id int OUTPUT
的存储过程(sql server 2012)该过程向数据库表中插入一些数据并返回受影响行的ID
SET @id=SCOPE_IDENTITY()
RETURN @id
Run Code Online (Sandbox Code Playgroud)
我从SQL Server测试它,它工作正常.但是当我从C#调用它时:它确实将数据插入到表中,但返回null:
SqlParameter parm = new SqlParameter("@id", SqlDbType.Int);
parm.Size = 32;
parm.Direction = ParameterDirection.Output; // This is important!
cmd.Parameters.Add(parm);
object id = (int?)cmd.ExecuteScalar();//<-null
Run Code Online (Sandbox Code Playgroud)
请指出导致这种奇怪行为的原因是什么?