标签: functions

如果句点是 varchar 列中的第一个字符,则删除它

我正在将数据从旧系统迁移到我正在构建的新系统中,并发现有人在做一种不好的做法,即在某些人的姓名开头添加句点,以使他们首先出现在某些下拉列表中。我试图弄清楚如何删除这些句点,当它们是列的第一个字符时,而不删除名称后面的句点(例如中间名首字母)。此更改是在命令期间进行的INSERT INTO SELECT

sql-server t-sql functions

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

如果我们不使用 MAX 函数怎么办

我应该使用脚本从表中获取最大值。它应该看起来像这样

BEGIN
DECLARE @MaxID AS INT
SELECT @MaxID = MAX([Id]) FROM dbo.suggestion
Insert into suggestion
values(@MaxID+ 1, 'value', 1);
END
Run Code Online (Sandbox Code Playgroud)

相反,由于一些错误,它是这样的

BEGIN
DECLARE @MaxID AS INT
SELECT @MaxID = [Id] FROM dbo.suggestion
Insert into suggestion
values(@MaxID+ 1, 'value', 1);
END
Run Code Online (Sandbox Code Playgroud)

到目前为止,它运行良好,由于当我们开始深入研究时出现了其他一些问题,然后它就暴露出来了。

我想知道到目前为止它是如何运作的。

如果有人分享他们的知识,我们将不胜感激

TIA

sql-server migration entity-framework functions max

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

执行过程时无限循环

在此输入图像描述

我有这张表,有 3 条记录。3条记录是创建脚本。我需要执行创建脚本,如果发生208错误,那么我需要保留记录并将状态设置为1。然后在其他记录完成后再次执行它。如果没有错误或者有除 208 之外的任何其他错误,我需要从表中删除它。但是当我执行它时,它会无限循环。我该如何解决?

问题是第二个视图参考了第一个视图。所以我需要先创建第二个,然后创建第一个。这就是我创建这个 SP 的原因。任何其他想法也表示赞赏。我是编码新手,所以请原谅我犯的任何错误。

Create PROCEDURE [dbo].[UP_CREATE_SCRIPT]

AS 

BEGIN 

declare @qry1 nvarchar(max)
DECLARE @i INT =1
DECLARE @qry2 NVARCHAR(100) 
IF EXISTS (select 1 from [SmartMigrateDB_New].dbo.temp3 where id>0 and type<>'sq') 

BEGIN 
truncate  table error_log

    while (select count(1) from [SmartMigrateDB_New].dbo.temp3 where status=1)>=0

    BEGIN 
        WHILE @i <=  (SELECT MAX(ID) FROM [SmartMigrateDB_New].dbo.temp3)
           BEGIN
            BEGIN TRY
             set @qry1 = ( select code from [SmartMigrateDB_New].dbo.temp3  where id = @i  )
             print @qry1                        
             EXEC sp_ExecuteSQL @qry1
             update [SmartMigrateDB_New].dbo.temp3 set status=0  where id = …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures functions errors query-performance

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

EVENTDATA() 函数在 SQL Server 中仅给出空值

我正在尝试使用触发器捕获登录时间EVENTDATA()。但它只为所有类型的事件提供 Null 值。有人可以帮我解决这个问题吗?这是我的触发器

CREATE TRIGGER trgBlockIP
    ON ALL SERVER
    FOR LOGON
    AS
    BEGIN
       DECLARE @clientip NVARCHAR(15);
       SET @clientip = (
                          SELECT
                             EVENTDATA().value(
                                                 '(/EVENT_INSTANCE/Clienthost)[1]',
                                                 'NVARCHAR(15)'
                                              )
                       );
       IF EXISTS (
                    SELECT ip
                    FROM   master.dbo.BLockedIPAddresses
                    WHERE  ip = @clientip
                 )
       BEGIN
          PRINT 'Your IP Address is blocked';
          ROLLBACK;
       END;
       ELSE
       BEGIN
          DECLARE @Range VARCHAR(15);
          SELECT
             @Range = SUBSTRING(
                                  @clientip,
                                  1,
                                  LEN(@clientip)
                                  - CHARINDEX('.', REVERSE(@clientip))
                               ) + '.*';
          IF EXISTS (
                       SELECT ip
                       FROM   master.dbo.BLockedIPAddresses
                       WHERE  ip = @Range
                    )
          BEGIN …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server-2008 sql-server t-sql functions

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