我正在查看这个旧的 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) 我想在 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)
正如托马斯所说,我还更新了存储过程。
这是我正在尝试做的事情,
获取基于 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) 我们有一张包含几百万行的生产表。我们运行了这个查询,它冻结了我们的数据库,
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 2000(请不要讨厌 :-))。
当我尝试给出的解决方案时,我收到此错误:
第 23 行:“-”附近的语法不正确。
这是因为命令与 SQL Server 2000 不兼容。
编辑
SELECT * FROM AnotherServer.AnotherServerDatabase.Server.Table1
Run Code Online (Sandbox Code Playgroud)