标签: sql-server

获取单个查询中记录的计数百分比

参考这个问题:

在一列中获取项目及其值的计数

我如何在单个查询中获得记录计数的百分比,如下所示:

ItemId        count          Percent
------------------------------------
   1            2              33.3
   2            0                0
   3            1              16.6
   4            3              50.0            
Run Code Online (Sandbox Code Playgroud)

谢谢

sql sql-server sql-server-2008

7
推荐指数
1
解决办法
7452
查看次数

使用递归公用表表达式从两个表中查找连续的no.s

我有以下表格:

Actual         Optional
------         --------
4                 3
13                6
20                7
26                14
                  19
                  21
                  27
                  28
Run Code Online (Sandbox Code Playgroud)

我要做的是选择:

1)"实际"表中的所有值.

2)如果它们形成具有"实际"表值的连续系列,则从"可选"表中选择值

预期的结果是:

Answer
------
4
13
20
26
3    --because it is consecutive to 4 (i.e 3=4-1) 
14   --14=13+1
19   --19=20-1
21   --21=20+1
27   --27=26+1
28   --this is the important case.28 is not consecutive to 26 but 27 
     --is consecutive to 26 and 26,27,28 together form a series.
Run Code Online (Sandbox Code Playgroud)

我使用递归cte编写了一个查询但是它永远循环并且在递归达到100级后失败.我遇到的问题是27场比赛26场比赛,27场比赛27场比赛27场比赛27场比赛28场比赛27场比赛......(永远)

这是我写的查询:

with recurcte as
        (
        select num as one,num as two from …
Run Code Online (Sandbox Code Playgroud)

sql sql-server recursive-query common-table-expression sql-server-2008

7
推荐指数
1
解决办法
617
查看次数

Sql Server 2008 R2 DC插入性能变化

我注意到一个有趣的性能变化,大约有150万个输入值.有人能给我一个很好的解释,为什么会这样?

表非常简单.它由(bigint,bigint,bigint,bool,varbinary(max))组成.我在前三个bigint上有一个pk clusered索引.我只插入布尔"true"作为数据varbinary(max).

从那时起,表现似乎非常稳定.

图例:Y(以毫秒为单位)| X(插入10K)

在此输入图像描述

我也很好奇我在图上有不断的相对较小(有时非常大)的峰值.

来自尖峰之前的实际执行计划.

来自尖峰之前的实际执行计划

图例:
我插入的表:TSMDataTable
1. BigInt DataNodeID - fk
2. BigInt TS - 主
时间戳3.BigInt CTS - 修改时间戳
4.位:ICT - 保留最后插入值的记录(提高读取性能)
5.数据: Data
Bool值当前时间戳保持不变

环境
它是本地的.
它不共享任何资源.
它是固定大小的数据库(足以使它不扩展).
(电脑,4核,8GB,7200rps,Win 7).
(Sql Server 2008 R2 DC,处理器亲和力(核心1,2),3GB,)

sql-server performance-testing sql-server-2008 sql-server-2008-r2 sql-server-performance

7
推荐指数
1
解决办法
510
查看次数

如何grep SQL Server存储过程?

我想对给定SQL Server数据库中的所有存储过程运行标准grep(假设2005或更高版本).我找到了各种简单的查询来列出包含特定对象的存储过程的名称,例如

SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%table_I_want_to_find%'
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是,像grep一样,列出已识别的存储过程中的特定行(所以我不必手动打开每一行,看看它是否是我正在寻找的).

我对T-SQL或PowerShell中的解决方案持开放态度,甚至是现成的实用程序.

sql-server powershell grep stored-procedures

7
推荐指数
1
解决办法
7015
查看次数

是sql server transaction atomic

所以我有一个存储过程(sql server 2008 r2)这样的东西

BEGIN TRAN
BEGIN TRY


   //critical section
    select value        
    update value
       //end of critical section


    COMMIT
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH
Run Code Online (Sandbox Code Playgroud)

我希望没有两个存储过程读取相同的值.换句话说,读取和更新应该是原子的.这段代码做到了吗?如果不是我该怎么办?

sql-server atomicity

7
推荐指数
1
解决办法
4513
查看次数

查询中的表名是否不区分大小写?

我已阅读以下文章.他们引用了这个,

SQL Server是一个区分大小写的后端应用程序.这意味着名为"addr"的表与名为"ADDR"的表区分开来.但是,由于Microsoft Query是基于MS-DOS的应用程序,因此无法区分案例; 因此,Microsoft Query将"addr"和"ADDR"视为同一文件.

现在我想知道他们的意思是case-sensitive back-end application什么?使用query带有安全性case-insensitivity吗?

提前致谢.

sql sql-server

7
推荐指数
1
解决办法
1万
查看次数

SQL SERVER ODBC ERROR(无效的对象名称)但是当我在SQL查询中添加mydb.dbo.mytable时一切正常

我有一个旧的asp.net 1项目(它在旧服务器上工作正常,mytable存在于db中.现在我正在尝试将其升级到asp.net 4

我的连接字符串是:

<add key="SqlConnection" 
     value="DRIVER={SQL Server};SERVER=bel\SQLEXPRESS;Trusted_connection=yes;DAT­ABASE=mydb;option=3;"/>
Run Code Online (Sandbox Code Playgroud)

我收到错误

错误[42S02] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的对象名称'mytable'.

OdbcCommand dataCommand = new OdbcCommand("select*from mytable",dataConnection);
dataCommand.CommandTimeout = 900;
OdbcDataReader dataReader = dataCommand.ExecuteReader(CommandBehavior.CloseConnection);

当我写SQL时,select * from mydb.dbo.mytable一切正常

我应该在数据库设置(安全性,架构,dbo)或连接字符串中更改什么?

sql-server schema odbc connection-string

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

SQL IsNumeric无法正常工作

保留列是一个varchar,对它执行求和我想将它转换为deciaml.但是下面的SQL给了我一个错误

select
cast(Reserve as decimal)
from MyReserves
Run Code Online (Sandbox Code Playgroud)

将数据类型varchar转换为数字时出错.

我添加了isnumeric而不是null来尝试避免这个错误,但它仍然存在,任何想法为什么?

select
cast(Reserve as decimal)
from MyReserves
where isnumeric(Reserve ) = 1
and MyReserves is not null
Run Code Online (Sandbox Code Playgroud)

sql sql-server

7
推荐指数
3
解决办法
2万
查看次数

使用变量通过脚本创建SQL Server登录

我试图通过脚本创建数据库后创建SQL Server登录.登录是主机PC的本地登录,此脚本将在多个主机上运行.

我想做的是以下内容:

USING MyDatabase
CREATE MyUser FOR LOGIN USER <computer name>/MyUser 
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做是将计算机名称(例如Location0001)合并到此语句中.

登录确实存在于每台计算机上并且已经在SQL Server上列出,因为它可以访问其他数据库.

如果相关,脚本应该能够在SQL Server 2008上运行.

每台机器的登录名如下:

Location0001\MyUser
Location0002\MyUser
Location0999\MyUser
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很感激,谢谢.

编辑:根据接受的答案我的最终解决方案如下:

DECLARE @cmd VARCHAR(200)
SET @cmd = N'CREATE USER [MyUser] FOR LOGIN [' + HOST_NAME() + '\MyUser]'
EXEC (@cmd)
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

7
推荐指数
1
解决办法
1万
查看次数

作为前端访问,sql服务器作为后端

我有一些具有许多字段的Access表.我已将每个访问表迁移到6或7个sql server表.我正在使用sql server 2008.现在我想使用Access作为前端,以便我可以在访问中输入数据,但它将存储在sql server中.我知道我必须建立ODBC连接.但我不确定如何创建一个访问表单来将其用作前端.如果这是一个基本问题,我很抱歉......

sql-server ms-access

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