标签: sql-server

IF 语句的问题

我遇到了这个存储过程的问题。当用户选择“是”时,它应该按照它在“是”的 if 语句中所说的那样做,但它什么也不做,也不向数据库中插入任何内容。它适用于“否”条件。你能告诉我什么不起作用吗?

ALTER PROCEDURE [dbo].[sp_ff_Insert_ProjectApproved]
(

        @project_no varchar(6)
       ,@sequence_no int
       ,@grant_programme varchar(2)
       ,@jobs_approved int
       ,@grant_amount int
       ,@Committee varchar(4)
       ,@Meeting_no int
       ,@Minute_Item int
       ,@jobs_maintained int
       ,@approval_date date
       ,@approval_by int
       ,@comments varchar(1600)
       ,@created_by int
       ,@created_date datetime
       ,@updated_by int
       ,@updated_date datetime
       ,@approval varchar(5)
       ,@ratify varchar(3)




       --,@research_type varchar(1)='T'
)

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from


DECLARE @ReturnValue int,
        @post_approval_status varchar(3),
        @approval_status varchar(3),
        @current_status varchar(3)  

set @current_status = ( SELECT approval_status from approval_master_tbl
         WHERE project_no = @project_no …
Run Code Online (Sandbox Code Playgroud)

null sql-server t-sql

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

“同时处理多行。减少并重试。” SQL Server Management Studio 中的错误

尝试从 SQL Server Management Studio v18.5 更新某些行时出现此错误:

消息 50000,级别 16,状态 1,过程 UPDATElimit,第 7 行 [批处理起始行 0] 要同时处理许多行。减少并重试。Msg 3609, Level 16, State 1, Line 1 事务在触发器中结束。该批次已中止。

我怎样才能绕过这个限制?

触发代码:

ALTER TRIGGER [dbo].[UPDATElimit] 
on [dbo].[table] 
FOR UPDATE 
AS 
BEGIN 
    IF (select count(*) from inserted) > 1000 
    BEGIN 
        RAISERROR('To many rows being processed at one. Reduce and try again.', 16, 1) 
        ROLLBACK 
    END 
END
Run Code Online (Sandbox Code Playgroud)

trigger sql-server t-sql

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

为什么我收到 SQL Server 数据库邮件的电子邮件大小错误?

我通过 SQL Server 电子邮件发送 6 个 .csv 文件作为附件。但是电子邮件失败并在数据库邮件日志中显示以下消息:

异常消息:无法向邮件服务器发送邮件。(服务不可用,关闭传输通道。服务器响应为:数据长度超过 52.4MiB 限制)

然后我运行以下命令将 maxfilesize 限制增加 2 GB

EXECUTE msdb.dbo.sysmail_configure_sp  
'MaxFileSize', '2147483647';
Run Code Online (Sandbox Code Playgroud)

文件大小限制已成功更改为 2 GB,但我仍然收到相同的错误消息。

以下是我的文件大小(以 KB 为单位)

文件 A 213 KB,文件 B 265 KB,文件 C 6246 KB,文件 D 35 KB,文件 E 60 KB,文件 F 31371 KB

我正在使用 mail-gun(smtp) 发送电子邮件。电子邮件在没有 FILE F 的情况下成功运行。但是当我附加 FILE F 时,电子邮件失败。当我将最大文件大小增加到 2 GB 时,为什么我的电子邮件失败。任何的想法?

sql-server database-mail

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

生成脚本以删除或映射 SQL Server 实例中的孤立用户

我对 SQL Server 很陌生。我有一个脚本,它在所有数据库中查找孤立用户并生成脚本以删除或映射用户以正确登录(如果可用)。

由于我想在大量服务器上运行该脚本,所以我想到了使用 PowerShell 来帮助我。但我现在有两个问题:

  1. 脚本错误
  2. Power-shell 执行出错

问题 1:以下脚本本身返回输出,但仍显示一些错误。我试图调试,但我无法这样做。

DECLARE @orphan_users TABLE (
    Server NVARCHAR(MAX),
    DBName sysname,
    [user_name] sysname,
    type_desc nvarchar(60),
    default_schema_name sysname NULL,
    create_date datetime,
    modify_date DATETIME,
    [sid] VARBINARY(85),
    cr_type int
); 

INSERT INTO @orphan_users (Server,
    DBname,
    [user_name],
    type_desc,
    default_schema_name,
    create_date,
    modify_date,
    [sid],
    cr_type
) 
EXEC sp_msforeachdb 
'use [?] 
SELECT 
    @@SERVERNAME 
    ,DB_NAME() DBname 
    ,name 
    ,type_desc 
    ,default_schema_name 
    ,create_date 
    ,modify_date 
    ,[sid] 
    ,Datalength(sid) AA 
from sys.database_principals 
where type in (''S'') 
and [sid] not in ( select [sid] from …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell

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

MS SQL 显式 rowversion 列开销?

对于 MS SQL 服务器,当我rv rowversion在表定义中声明类似的内容时,我可以访问记录的 rowversion 值。它对表的大小有什么影响吗?

如果我理解正确,无论是将列显式还是隐藏,都会独立地为记录存储 rowversion 值。因此,使列显式不应导致记录(表的)大小的增加。这个假设正确吗?

sql-server

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

使用哈希流不同运算符进行查询调整更新

需要一些帮助来理解UPDATE以下语句之一的缓慢:-

UPDATE TOP (100) xyz
SET xyz.flag = 1
OUTPUT inserted.Rcode, inserted.EDR, inserted.id, abc.EID,abc.CID,abc.ENID,abc.Cdate
FROM dbo.table1 xyz WITH (UPDLOCK, READPAST)
INNER JOIN dbo.table2 abc WITH (NOLOCK)
on xyz.id=abc.id
WHERE xyz.flag = 0
Run Code Online (Sandbox Code Playgroud)

表1有大约。50 万行,表 2 大约有。500 万行

慢计划

哈希匹配不同流运算符显示黄色警报,消息为:

操作员使用 Tempdb 溢出数据,以溢出级别 4 和 1 个溢出线程执行”

构建残差:

database.dbo.table2.id as abc.id = database.dbo.table2.id as abc.id

我截了屏。不幸的是,由于安全原因,我不能提供更多,甚至不能提供匿名计划。从我的工作站我无法访问互联网,所以我无法让计划浏览器在那里运行。

在此处输入图片说明

通常,对于较小的行子集,它在几秒钟内,就像我们刚刚匹配 10K 行或其他东西一样。但是随着数据量的增加,这似乎是一个临界点,应用程序无法承受 1 分钟的运行时间。从 SSMS 我得到 30 秒,但从应用程序我们有平均。约 50 秒 RCSI 处于测试阶段。

我的好计划没有显示 Hash Match Flow Distinct 运算符,如我的屏幕截图所示,而其余计划保持不变。好的一个在 3 秒左右完成。正如所见,该操作员花费了近 16 秒。我们可以通过适当的索引或查询重写来消除它吗? …

sql-server execution-plan update sql-server-2014 query-performance

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

哪种 SQL Server 许可证适合我的用例?我可以使用免费许可证吗?

Mod 注意:这个问题不适合或 dba.se,但我留下这个问题是因为每年新进入该领域的人数仍然很高,而且许可始终是最难驾驭的事情。有时,我们只需要一只有用的手来指导我们的旅程。有时我们需要花钱请人教我们或复习我们的工作。每一次旅程都会有所不同,所以我们偶尔也会有例外。~ jcolebrand


我有几个数据库不时用于培训课程。我是否必须使用 SQL 许可证将它们托管在生产服务器上,还是出于许可原因可以将它们视为非生产数据库?

sql-server license

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

在子查询中生成随机行顺序

我知道这里(和这里)的其他答案说要订购newid()。但是,如果我top 1在子查询中进行选择- 以便在外部查询中的每行生成随机选择 - 每次使用都会newid()产生相同的结果。

那是:

select *,
    (select top 1 [value] from lookupTable where [code] = 'TEST' order by newid())
from myTable
Run Code Online (Sandbox Code Playgroud)

...lookupTable.value在从 返回的每一行上产生相同的值myTable

我正在尝试从lookupTable. 那个表只有几行。在现实世界中,我想要update myTable set someColumn = ......一个随机lookupTable.value值,这样每一行都myTable设置了一个随机值,而不是生成一个随机值并将其分配给所有行。

sql-server random sql-server-2016

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

在非聚集索引中将许多列作为包含列的成本是多少?

在 SQL Server 的非聚集索引中将许多列作为包含列的成本是多少?

sql-server t-sql

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

“缩小”文件与简单地减小初始大小有什么区别?

我是DB Administration 的新手。所以我对 SQL Server Management Studio (SMSS) 或通过 T-SQL 提供的“文件收缩”功能感到困惑。如果我可以简单地降低数据库的初始大小,为什么我需要使用“文件收缩”功能?

在此处输入图片说明

我试图(编辑)减少我的数据库的初始大小,它成功地减少了我的数据库物理文件。如果我使用“收缩”功能,这也将完全相同。

sql-server shrink

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