小编Mat*_*ics的帖子

在这个SQL语句中使用双内连接的原因是什么?

我正在查看这个旧的 SQL 查询。我无法得到的一点是为什么它在同一列上两次内部连接同一个表。我说的是 Table1 和 Table1 以别名“Table1Alias”加入,

SELECT DISTINCT othercolumns,
                Table1Alias.columna
FROM   maintable
       INNER JOIN secondarytable
               ON maintable.id1 = secondarytable.a_id1
       INNER JOIN table1
               ON secondarytable.id2 = table1.id3
       INNER JOIN table1 Table1Alias
               ON secondarytable.id2 = Table1Alias.id3
       INNER JOIN thirdtable
               ON table1.id4 = thirdtable.id5
       INNER JOIN fourthtable
               ON thirdtable.id6 = fourthtable.id7
       INNER JOIN fivetable
               ON thirdtable.id8 = fivetable.id9
       INNER JOIN sixthtable
               ON Table1Alias.columna = sixthtable.id10
       LEFT JOIN seventhtable
              ON thirdtable.id11 = seventhtable.id12
WHERE  LEFT(secondarytable.type123, 2) BETWEEN '01' AND '09'
       AND secondarytable.type456 = …
Run Code Online (Sandbox Code Playgroud)

sql-server

10
推荐指数
2
解决办法
4821
查看次数

where 子句中的存储过程空参数

我想在 where 子句中使用一个参数,仅当它的值由强类型数据集提供时,这是我目前正在尝试的,当我提供时我得到正确的结果,parameter3而当我不提供它的值时没有结果。

我想要的是,当我没有为 提供值时parameter3,它不应该在查询中使用它,因为它的值为空,我想查看查询中的所有结果,而不是where Paramerter3 = null

ALTER procedure [dbo].[GetData]
(
    @Parameter1 varchar(256),
    @Parameter2 varchar(256),
    @Parameter3 int = null
)
AS

SELECT
    *
FROM
    Table1
WHERE
    Table1.URL LIKE '%' + @Parameter1 + '%' 
    AND Table1.ID = @Parameter2
    AND (@Parameter3 IS NULL OR Table1.ID2 = @Parameter3)
ORDER BY
    Table1.Title
Run Code Online (Sandbox Code Playgroud)

编辑:我试过托马斯的回答并像这样执行:

EXEC @return_value = [dbo].[GetData]
                              @Parameter1 = N'asda',
                              @Parameter2 = N'asda',
                              @Parameter3 = null

SELECT  'Return Value' = @return_value
GO
Run Code Online (Sandbox Code Playgroud)

正如托马斯所说,我还更新了存储过程。

sql-server t-sql sql-server-2012

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

除了基于列的重复项中的重复项

这是我正在尝试做的事情,

  • 获取基于 2 列的重复项(假设返回 500 行)

  • 根据以上 2 列 + 另一列获取重复项(假设返回 100 行)

现在我想获得剩余的 400 行。简而言之,我想要所有由于 columnC 而没有重复项的重复项...

-- get duplicates based on ColumnA, ColumnB
SELECT '-'
    ,ColumnA
    ,ColumnB
    ,ColumnC
    ,COUNT(*)
FROM MainTable
     ...SOME joins(INNER AND left)
WHERE ColumnA IS NOT NULL
GROUP BY ColumnA
    ,ColumnB
    ,ColumnC
HAVING COUNT(*) > 1

EXCEPT

-- get duplicates based on ColumnA, ColumnB, ColumnC
SELECT '-'
    ,ColumnA
    ,ColumnB
    ,ColumnC
    ,COUNT(*)
FROM MainTable
     ...SOME joins(INNER AND left)
WHERE ColumnA IS NOT NULL
GROUP BY ColumnA …
Run Code Online (Sandbox Code Playgroud)

sql-server

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

创建索引是否需要停机

我们有一张包含几百万行的生产表。我们运行了这个查询,它冻结了我们的数据库,

USE ExampleDatabase

GO
CREATE NONCLUSTERED INDEX IX_Table1_URL
ON [dbo].[Table1] ([URL])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table1_LastModified
ON [dbo].[Table1] ([LastModified])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table2_URL
ON [dbo].[Table2] ([URL])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table2_LastModified2
ON [dbo].[Table2] ([LastModified2])
GO
Run Code Online (Sandbox Code Playgroud)

我是一名对索引知识非常有限的开发人员,我不知道从哪里开始,只是添加 Table1 和 Table2 都有数百万行。

sql-server sql-server-2012

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

我可以针对另一个实例上的表创建视图吗?

我需要从不同服务器但相同域上的另一个 SQL Server 查询表,但我不确定如何才能做到这一点。

我尝试了这个答案中的解决方案但它对我不起作用,因为我得到了 SQL Server 2000(请不要讨厌 :-))。

当我尝试给出的解决方案时,我收到此错误:

第 23 行:“-”附近的语法不正确。

这是因为命令与 SQL Server 2000 不兼容。

编辑

SELECT * FROM AnotherServer.AnotherServerDatabase.Server.Table1
Run Code Online (Sandbox Code Playgroud)

sql-server-2000 view

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