标签: sql-server-2008

SQL Server 中的公制到标准单位转换

我给出了两个表格的简化版本,如下所示。

表记录

ID  unit  val
--- ---   ---
1   KV    3
1   BAR   4
2   KV    7
2   KG    5
3   C     37
Run Code Online (Sandbox Code Playgroud)

表单位

unit    convUnit    formula
---     ---         ---
KV      CV          @val * .865
KG      lbs         @val / 2.205
BAR     PSI         @val / 14.504
C       F           @val * 9/5 + 32
Run Code Online (Sandbox Code Playgroud)

我将无法更改表结构。

我知道哪个单位将转换为哪个单位(即我知道 KV 将转换为 CV,KG 将转换为磅等..)。

请注意,公式是一varchar列,我从表格tblRecords.unit中引用了tblUnit.unit

但我的问题是如何在单个查询中动态计算公式。即我想要以下输出。

ID  unit    val     convVal(column will be counted on the fly using formula stored in tblUnit.formula …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql

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

如果动态数据透视查询没有结果,如何添加默认空行

我执行此过程并在我的应用程序中显示结果。如果我的查询没有返回任何结果,我仍然需要打印出列标题,并且由于它是动态查询,我无法进行硬编码。我的查询运行良好,如果没有找到结果,我该如何添加 NULL 行。因此,例如,在这是执行 SP 的结果的情况下,SQL 返回列标题,我想添加一个空行。

TSB 编号 系统 1 系统 2 系统 3

   ALTER PROCEDURE  [dbo].[spExportServiceTSB]                            
    (@StartDate datetime,                            
    @EndDate datetime,                                   
    @SelectedSystemIDs nvarchar (2000) = NULL,    
    @SelectedTsbIDs nvarchar (2000) = NULL,   
    @UserRoleID int
    )                            
    AS  



DECLARE @PlatformID INT = NULL

IF(@SelectedSystemIDs = '')
BEGIN
SET @SelectedSystemIDs = NULL
END

IF(@SelectedTsbIDs = '')
BEGIN
SET @SelectedTsbIDs = '0'
END

IF(@UserRoleID = 1)    
 BEGIN     
  SET @PlatformID = 1     
  END  

IF(@UserRoleID = 2)  
BEGIN  
SET @PlatformID = 2  
END  

IF (@UserRoleID = 3) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008

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

每 150 行增加一个整数

我正在尝试编写一个 SELECT 查询来计算BatchNumber从 1001 开始每 150 行增加 1 的列。

预期BatchNumber应该是1001前 150 行,然后1002是第 151-300 行,依此类推...

我尝试过在动态上使用除法ROW_NUMBER(),但无法得到它。

SELECT ID
    ,ROW_NUMBER() OVER (ORDER BY (SELECT ID)) AS RowNumber
    ,CASE
        WHEN CONVERT(INT, (ROW_NUMBER() OVER (ORDER BY (SELECT ID)) % 150))=0
        THEN 0 ELSE 1001 END
    + CONVERT(INT,(ROW_NUMBER() OVER (ORDER BY (SELECT ID)) / 150))
    AS BatchNumber  
FROM Table1 WITH (NOLOCK);
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server sql-server-2008-r2

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

缩小 SQL Server 2008 Standard 数据库以将其移动到 SQL Server 2014 Express

我需要使用 SSMS 缩小流行的 CRM 数据库以将其移动到新服务器上。我将从 SQL Server 2008 Standard 转到 SQL Server 2014 Express。数据库处于简单恢复模式。它需要低于 10 gig 限制。

有 39% 的空间可以擦除,但缩小不起作用。在删除不同表中的 100000 行后,我已经多次执行此操作,包括此数据库,但这次不想缩小。

没有错误只是运行而什么也不做。

sql-server-2008 sql-server shrink sql-server-express sql-server-2014

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

将 SQL Server 结果转换为 PowerShell 可以访问和使用的文本文件

下面的查询用于创建一个带有服务器名称列表的文本文件。

我遇到的问题是文本文件的创建就像

Server, Server, Server etc.
Run Code Online (Sandbox Code Playgroud)

但我需要它如下

Server
Server
Server
Run Code Online (Sandbox Code Playgroud)

查询:

BEGIN
    CREATE TABLE [TempPSWmiObjectQuery]
                (QueryText nvarchar(max))
END

INSERT INTO [TempPSWmiObjectQuery]

SELECT STUFF((SELECT char(13)+char(10), 
             SUBSTRING(ServerName, 1, 
             CASE WHEN CHARINDEX(',', ServerName) > 0 
                  THEN CHARINDEX(',', ServerName)-1
                  ELSE LEN(ServerName)
             END)
FROM MasterList
FOR XML PATH('')), 1, 1, '')

EXEC sp_configure 'xp_cmdshell', 1;  
RECONFIGURE

EXEC xp_cmdshell 'bcp SQLEnv.dbo.TempPSWmiObjectQuery out "\\ServerName\Data\temp\testlist.txt" -c -T -S "ServerName\Instance"'

EXEC sp_configure 'xp_cmdshell', 0;  
RECONFIGURE

DROP TABLE TempPSWmiObjectQuery
Run Code Online (Sandbox Code Playgroud)

PowerShell 脚本:

        $StagingServer = "ServerName\InstanceName"
        $StagingServerDatabase = "SQLEnv" 

    foreach($line in 
    [System.IO.File]::ReadLines("\\ServerName\Data\temp\testlist.txt")) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server powershell sql-server-2008-r2 sql-server-2012

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

是否使用 NOCOUNT ON 运行 COUNT() 语句;消耗很多

在数百万行上.. 是否值得缓存总量或关闭 NOCOUNT?而不是每次都请求那么多数据?

Sql Server 2008 R2

另外,是否仅在 Primary_Key 上运行 COUNT() 语句,以提高性能?

sql-server-2008 sql-server

0
推荐指数
1
解决办法
356
查看次数

如何禁止从 SQL Server 上的备份还原?

我想禁止从备份还原。我怎样才能做到这一点?我的一位朋友对我说

“为您的数据库获取证书,任何人都无法从您的备份中恢复”

我搜索了证书,但没有找到任何东西。我想确保没有人从备份或其他方式复制我的数据库。

反正有这个问题吗?

sql-server-2008

0
推荐指数
1
解决办法
58
查看次数

INNER JOIN 使 COUNT(*) 变慢

我有一个非常简单的查询:

SELECT COUNT(*)
FROM messages
INNER JOIN users ON messages.user_id = users.user_id
Run Code Online (Sandbox Code Playgroud)

加入需要 1146 毫秒,没有加入需要 220 毫秒(220 毫秒对我来说仍然很慢)。在包含 1,000,000+ 行的消息表上进行测试。

我在两个表 ( message_idand user_id)上都设置了主键,并设置了连接messages.user_idand的外键users.user_id

此查询的原因是为分页系统提供记录总数。

我还能做些什么来加速查询?

performance sql-server-2008 join foreign-key sql-server

0
推荐指数
1
解决办法
8961
查看次数

SQL Server 数据库编码

我在 SQL Server 2008 中的数据库进入了可疑模式,我通过更改为紧急模式来修复它,然后我使用了这个查询

DBCC CHECKDB (Test, REPAIR_ALLOW_DATA_LOSS);
Run Code Online (Sandbox Code Playgroud)

现在我的表格中的数据字母从阿拉伯语变为问号,我想恢复编码而不丢失表格或丢失数据

sql-server-2008 sql-server

0
推荐指数
2
解决办法
242
查看次数

是否可以在没有手动 INSERT 语句的情况下使用生成的数据生成表?

是否可以在SQL Server 2008中使用SQLCMD创建表并生成数据并插入表中,而无需手动INSERT为每一行键入语句?

例子:

假设有 10 周(1、2、3 ... 10)和 2 个时间点(上午 11 点、下午 12 点)和 5 个场地(房间 1、房间 2 ... 房间 5)。因此总共会有 10 x 2 x 5 = 100 行。

那么,在给定 3 个数据参数(周、时间和地点)的情况下,是否有可能生成这 100 行的 SQL 语句?

+--------------------------------+
| Week    |   Time   |   Venue   |
+--------------------------------+
| 1       |  11 am   |  Room 1   |
| 1       |  12 pm   |  Room 1   |
| 1       |  11 am   |  Room 1   |
|                                |
| 10      | …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server sqlcmd

0
推荐指数
1
解决办法
309
查看次数