标签: sql-server

JOIN 的替代方案

第一次触发

ALTER TRIGGER [dbo].[Price_Modified]
    ON [dbo].[stock_recieve]
    AFTER UPDATE
AS
SET NOCOUNT ON;
IF UPDATE (Stock_out) 
BEGIN
    UPDATE s
    SET value = new.Item_Price * new.Stock_out
    FROM stock_recieve AS s
    JOIN inserted AS new ON new.[Bill No] = s.[Bill No]
    JOIN deleted AS old ON old.[Bill No] = s.[Bill No]
END;
Run Code Online (Sandbox Code Playgroud)

第二个触发器。

 ALTER TRIGGER [dbo].[newval] 
      ON [dbo].[stock_recieve]
        AFTER UPDATE
    AS
    SET NOCOUNT ON;
    IF UPDATE (Stock_out) 
    BEGIN
        UPDATE s
        SET Uservalue = new.Item_Price * new.Stock_out
        FROM stock_recieve AS s
        JOIN inserted AS …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

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

如何确保数据不会插入到数据已经存在的表中?

我创建了一个查询,我想将结果插入到另一个表中。它将每天作为作业运行,导入的数据仍将保留在结果集中。如果数据已存在于目标表中,我不希望导入数据。查询如下所示:

WITH cteUniquePages
(
CorrelationID,
Title,
URL,
HitDate,
TotalVisitsOnDate,
DontUseThisDate)
AS
(
    SELECT DISTINCT
    CorrelationID,
    Title, 
    URL,
    HitDate,
    COUNT(HitDate) OVER (PARTITION BY URL, HitDate) 'TotalVisitsOnDate',
    CAST(LogTime AS date) 'DontUseThisDate'
    FROM
        (SELECT
        CorrelationId,
        UserLogin,
        LogTime,
        Title,
        CONCAT(
            (CASE 
                WHEN WebUrl <> '' THEN CONCAT(ServerUrl,'/') ELSE ServerUrl END), 
            WebUrl,DocumentPath) 'URL',
        CONCAT(
            CASE
                WHEN (LEN(DATEPART(day,LogTime)))=1 THEN CONCAT('0',DATEPART(day,LogTime)) END,
            CASE
                WHEN (LEN(DATEPART(day,LogTime)))=2 THEN (DATEPART(day,LogTime)) END,'-', 
            CASE 
                WHEN (LEN(DATEPART(month,LogTime)))=1 THEN CONCAT('0',DATEPART(month,LogTime)) END,
            CASE
                WHEN (LEN(DATEPART(month,LogTime)))=2 THEN (DATEPART(month,LogTime)) END,
            '-', DATEPART(year,LogTime)) 'HitDate'
        FROM WSS_Logging.dbo.RequestUsage
        WHERE UserLogin …
Run Code Online (Sandbox Code Playgroud)

sql-server insert t-sql

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

带有可选参数的存储过程

我有一个视图,它抓取了我希望能够搜索的大量数据。视图设置了以下列:

Part_Number、说明、信息、供应商、制造商、类别、子类别、货币、价格、折扣。

我希望创建一个存储过程,它可以让我在视图中搜索我专门查找的数据。就像是:

SELECT * FROM PartsData
WHERE Part_Number = '0010.05.20.20'
Run Code Online (Sandbox Code Playgroud)

现在我的第一个想法是设置过程,以便它寻找的唯一参数是 a VARCHAR,它基本上包含整个WHERE子句的内容。这听起来像是行得通的。

但是,我是否可以使用可选参数设置存储过程?我不确定这是否是您可以在 SQL 中执行的操作。

如果没有,我最初的实施想法是我最好的选择吗?因为看起来应该有更好的方法来做到这一点。:\

有时WHERE子句可能很长,例如:

WHERE Description LIKE '%cap' 
AND Supplier LIKE 'A2A Systems' 
AND Manufacturer LIKE 'Vario'
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures

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

为什么大多数 Sql 注入需要这样的 url “index.asp?id=123”

我正在尝试学习“SQL 注入”概念,并尝试练习一些 Kali 工具来学习,但有一个我不明白的问题,我的问题是为什么大多数工具都需要以“AAA.BBB?id”结尾的 URL? =000" 作为注入的输入字符串。

sql-server sql-injection

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

将两个现有列中的值添加到新列中以获得总计

我们的数据库中有两个名为“ClientIncome”和“PartnerIncome”的现有列。我们想添加一个名为“HouseholdIncome”的新列

我们想将“ClientIncome”和“PartnerIncome”中的值添加到新的“HouseholdIncome”列中?

这是我们数据库的一个小例子。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Incomes](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientIncome] [float] NOT NULL,
    [PartnerIncome] [float] NULL,
    [HouseholdIncome] [float] NULL
) ON [PRIMARY]

GO
SET IDENTITY_INSERT [dbo].[Incomes] ON 

GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (1, 130.77, NULL, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (2, 294.82, 339.28, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (3, 0, NULL, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

出于安全原因,选择 SQL Server 侦听哪个 TCP 端口?

我知道 MS SQL Server 的默认 TCP 端口是 1433,出于某些安全原因最好更改它。但是我想知道SQL Server选择哪个端口而不是1433更好,才能正常工作,不干扰其他程序的工作?如果我选择一个已经被其他程序使用的端口怎么办?

谢谢你的时间!

sql-server network tcpip

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

对使用连接或子查询 SQL 感到困惑?

表格1

Id Name  DemoID
1  a      33
2  b      44
3  c      33
4  d      33
5  e      44
Run Code Online (Sandbox Code Playgroud)

表2

Id DemoID IsTrue
11  33     1  
12  44     1
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用以下 2 个使用连接和使用子查询的查询来找到表 2 中存在哪个 DemoID,但是对于更多的记录,哪个更准确/更相关?

使用加入 -

SELECT Table1.Id FROM Table1  Table1 join Table2 Table2 on Table1.DemoID  = Table2.DemoID 
WHERE Table2.IsTrue = 1
Run Code Online (Sandbox Code Playgroud)

使用子查询 -

SELECT Table1.Id  FROM Table1  Table1
WHERE Table1.DemoID  in (select Table2.DemoID from Table2 Table2)
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

Read Commited 标准行为中是否存在重复项?

这是指这个问题:Duplicate records returned from table with no duplicates

“读提交”隔离级别假定一个事务可以以不同的方式读取同一条记录,但并不明确暗示记录可以重复。我同意同一事务中的两个语句可以返回不同的数据集,但返回带有重复记录的相同数据集听起来很疯狂。

据我所知,只有 MS SQL Server 有这种行为。

如果它符合ANSI SQL 标准定义的“Read Committed”隔离级别,请证明或反驳。

sql-server isolation-level sql-standard

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

INSERT 语句错误消息引用列我没有包含在查询中

我正在使用 MSSQL 2008。

我的 INSERT 语句如下:

INSERT INTO [DB1].[dbo].[SpotArtSong](ID)
SELECT  SNG.S_ID
FROM [DB1].[dbo].[SpotArtSong] SPOT
INNER JOIN [DB2].[dbo].[nt-art] ART 
ON ART.Artist_Name LIKE SPOT.[Artist]+'%'
INNER JOIN [DB2].[dbo].[nt-sng] SNG 
ON ART.Artist_ID  = SNG.Artist_ID
AND left(SNG.SONG_TITLE,10) = left(SPOT.[Song],10)
WHERE spot.BDSID is NULL
Run Code Online (Sandbox Code Playgroud)

[DB1].[dbo].[SpotArtSong] 上的 [ID] 列有一些我试图替换的空值。我找到了替换项,在查看完整的列结果时,我对从 SNG.S_ID 返回的搜索结果感到满意。我正在尝试将该一列插入到 [DB1].[dbo].[SpotArtSong] 上的一列中。

本质上,我将一些数据报废到 [DB1].[dbo].[SpotArtSong] 中,并将其与 [DB2].[dbo].[nt-art] (ART) 和 [DB2] 之间的一些现有生产数据进行匹配.[dbo].[nt-sng] (SNG)。我知道 ART 和 SNG 中的数据是正确的,我正在将其与 SPOT 中报废的数据相关联

失败声明说:

Cannot insert the value NULL into column 'Artist', table 
'DB1.dbo.SpotArtSong'; column does not allow nulls. INSERT 
fails.
The …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

RAM 中的逻辑读取是否出现在等待统计信息中或在哪里?

关于 SQLOS 的执行模型(RUNNING 状态、RUNNABLE 队列、WAITER 列表),当当前正在进行 RAM 中页面的逻辑读取时,任务的状态是什么?

如果是 WAITER 列表,最流行的等待类型是什么?

我可以以某种方式测量此类操作所需的时间吗?

我知道很多逻辑读取会减慢您的查询速度,很多表/索引扫描(已经位于缓冲池中)会减慢您的查询速度 - 我只想知道它们如何出现在统计信息/dmv 中或如何将其与其他数据区分开来“经典”等待类型。

performance sql-server waits performance-tuning

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