小编Jua*_*lez的帖子

SQL Server 2008 查询保存在日志中?

每次我创建查询并运行它以创建报告时,我都会将查询保存在我的 Projects 文件夹中,以防将来我必须重新运行查询或者由于任何原因必须修改它,但似乎出于某种原因我在六月中旬的某个时候运行的查询没有保存。我需要查看我在查询中使用的代码,因为我正在查看报告,但有些数字看起来不正确,因此我需要检查查询以查看代码中是否存在错误编写的内容。

无论如何,在某些日志中,我是否可以在 6 月份看到我运行(但未保存)的查询的代码?如果可以的话,这将是惊人的。谢谢!

sql-server-2008 query transaction-log

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

以编程方式查找创建唯一组合键所需的最少字段集

我正在将不同来源的平面文件导入 SQL Server 中的表中。我正在使用提取中的字段组合创建一个复合主键,这些字段将为我的每一行提供一个唯一的键。

我现在的做法是从 1 个字段开始,然后继续连接字段,直到找到对所有记录都是唯一的键。这可能有点耗时,或者我最终可能会连接比我真正需要的更多的列以获得唯一键。

是否有某种 SQL 脚本可以在表上运行,它会给我最少数量的字段(名称),我需要连接以获得唯一键?因此,如果表中有 1 个字段对所有记录都是唯一的,则将返回该 1 个字段名称。如果我需要连接 [memberid]、[claimid] 和 [date of service] 以获得唯一键,那么这 3 个字段名称将是脚本的结果。

database-design sql-server primary-key unique-constraint

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

为什么在此查询中使用 CTE 比使用 #Temp 表快得多?

我有 2 个不同的查询来识别重复(如下)。两个查询之间的唯一区别是一个使用 CTE,另一个使用 #Temp 表。

有谁知道为什么 CTE 比 #Temp 表快得多(0:20 秒 VS. 1:22)?

我宁愿使用 CTE,但我需要使用 CTE 运行 2 个 STATEMENTS(从 CTE 删除,然后从 CTE 插入表),但 SQL Server 只允许您在 CTE 上编写一个 STATEMENT。

查询 1:

WITH DUPS AS(
   Id,
   Column1,
   Column2,
   Column3,
   RN = ROW_NUMBER()OVER(PARTITION BY ID ORDER BY id)
   FROM mytable
)
  Select top 1 * FROM DUPS WHERE RN > 1 
Run Code Online (Sandbox Code Playgroud)

查询 2:

 SELECT    
           Id,
           Column1,
           Column2,
           Column3,
           RN = ROW_NUMBER()OVER(PARTITION BY ID ORDER BY id)
       INTO #DUPS
       FROM mytable …
Run Code Online (Sandbox Code Playgroud)

sql-server

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

SQL Server 替换未返回预期结果

下面的代码不应该返回0吗?

SELECT REPLACE(ISNULL('',0),'',0)
Run Code Online (Sandbox Code Playgroud)

这也不返回0....

SELECT REPLACE('','',0)
Run Code Online (Sandbox Code Playgroud)

我在包含数值的表中有一个 nvarchar 字段,但有时为空(不为空)。

我有一个查询,检查该字段是否<另一个字段中的数字,但我得到

“将数据类型 nvarchar 转换为数字时出错。”

如果该字段为空,则会出错。我试图在查询执行期间将空白值 ('') 转换为零,这样我就不会收到转换错误,但我刚刚意识到

SELECT REPLACE('','',0)
Run Code Online (Sandbox Code Playgroud)

不会将空白字段转换为 0。

我尝试使用下面的代码来尝试避免转换错误,但是当阈值字段为空时它没有像我预期的那样评估为 0:

SELECT CAST(REPLACE(ISNULL(Threshold,0),'',0) as decimal(4,2))
Run Code Online (Sandbox Code Playgroud)

当阈值字段为空时,如何让代码评估为 0。

我猜我可以写一个 if 或 case 语句来跳过空白 ('') 值阈值,但我认为必须有一种方法可以全部内联,就像我试图用上面的代码做的那样.

sql-server

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

SQL Server JOIN 不起作用

我不确定为什么下面的连接查询没有返回任何结果。

SELECT * FROM table1 JOIN table2  ON table1.fieldid = table2.idfield 
Run Code Online (Sandbox Code Playgroud)

以下 2 个查询返回结果,所以当我可以清楚地看到两个表具有共同的连接字段值时,我不确定为什么连接不会选择任何行。

SELECT *  FROM table1 WHERE fieldid =  900399530  (returns rows)
SELECT *  FROM table2 WHERE idfield =  900399530  (returns rows)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

以下是 2 列的数据类型:

fieldid [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL

idfield [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL

join sql-server

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