标签: t-sql

找出错误日志的日期和/或数量 xp_readerrorlog

我有一些代码可以帮助每天在我们的 SQL Server 上自动检查错误日志。此代码调用xp_readerrorlog 0来检查错误日志,并调用 xp_readerrorlog 0,1来检查 SQL Server 日志。

然而,有时我需要扫描不止一个错误日志。

我希望能够通过 T-SQL 查看日志的日期,或者除此之外,找到存在的日志数量。

我读到我们最多可以有 99 个存档日志,但是当尝试显示不存在的错误日志时,服务器会抛出以下错误消息。

“xp_readerrorlog() 返回错误 2,'系统找不到指定的文件。”

我知道日期信息和数字存在,因为 SSMS 显示它(见下图。)

在此处输入图片说明

sql-server t-sql error-log

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

读取连接命令时出错

我正在尝试运行一个递归更改表,从我的 sys 表中读取几个参数。

DECLARE @AlterCmd NVARCHAR(MAX)

SELECT top 1
        @AlterCmd = 'ALTER TABLE [dbo].[table] ALTER COLUMN ' + COLUMN_NAME + ' NVARCHAR(' + CHARACTER_MAXIMUM_LENGTH + ')'
    FROM 
        information_schema.columns 
    WHERE 
        table_name = 'table_name' and DATA_TYPE like '%char%'

print @AlterCmd
Run Code Online (Sandbox Code Playgroud)

在此示例代码中,我只想验证命令是否正确,但由于连接中的错误而无法运行它。根据我收到的错误消息:

Msg 245, Level 16, State 1, Line 63
Conversion failed when converting the varchar value ')' to data type int.
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

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

为 CRUD 应用程序访问创建具有有限权限的 SQL Server 登录名和用户

我正在尝试创建一个 SQL 语句来在 SQL Server 中创建一个登录名和用户,这将允许 Web 应用程序对单个数据库执行 crud 操作,并允许完全访问所有表和存储过程、视图等。

我知道如何创建一个登录名和一个用户......但我作为继续的最佳方式离开了我的深度。

CREATE LOGIN [myUser] WITH PASSWORD=N'xxx', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

CREATE USER [myUser] FOR LOGIN [myUser] 
    WITH DEFAULT_SCHEMA = dbo;
GO
Run Code Online (Sandbox Code Playgroud)

security sql-server t-sql

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

如果值为 null 或为空,则不要在字符串前添加逗号

如果我的结果为空或空,我希望它不要在字符串前添加逗号。我怎样才能做到这一点?

  Update Companies 
    set address4 = concat(address4,','+ t.Eircode) 
    From companies c
    Inner Join Temptbl1 t
    on c.comp_id = t.Comp_ID
    OR address4 = ''
Run Code Online (Sandbox Code Playgroud)

更新 :

只是为了在我进行此更新时说清楚

   ,V05 TTX1 
    Waterford,X01 B234
    ,B90 E902
    Co Wexford,TD2 PVE2
Run Code Online (Sandbox Code Playgroud)

不管它是否为空,它都会添加一个逗号

我想找回的是:

    V05 TTX1 
    Waterford,X01 B234
    B90 E902
    Co Wexford,TD2 PVE2
Run Code Online (Sandbox Code Playgroud)

如果没有值,则只需添加不带逗号的字符串,在我们的例子中V05 TTX1不带,在字符串的开头

CREATE TABLE [dbo].[companies](
    [comp_id] [int] NOT NULL,
    [address4] [varchar](32) NOT NULL
)


INSERT INTO [dbo].[companies]
           ([comp_id]
            ,[address4])
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

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

数据库图表的脚本创建

是否可以使用 T-SQL 编写数据库图表的创建脚本?

如果不是,当您使用数据库图表设计器保存/编辑图表时(它是使用 PowerShell 还是其他某种语言来保存和加载这些类型的对象),它在做什么?

我问是因为我希望自动创建数据库图表。我有一个我的开发人员编写的工具(在 C# 中),它根据它对我们供应商数据所做的一些 Web 服务调用的响应自动创建表及其外键关系。

sql-server t-sql database-diagrams

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

需要在所有数据库中运行 select 语句

我正在尝试跨多个数据库运行如下查询

select ParamValue from Table1 where paramname = 'SYSTEM_LICENSE'
Run Code Online (Sandbox Code Playgroud)

每个 DB 的名称类似于下面的名称,并且应排除某些 DB。

“客户_123”

我查看了使用 sp_MSforeachdb,但它不受支持并且运行不佳。我试图弄清楚如何编写游标,但没有成功。在这一点上,只是寻求可以真正写出我想要做的事情的人的帮助。

sql-server t-sql cursors

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

LTRIM/RTRIM/ISNULL 的操作顺序

LTRIMRTRIM结合使用时,您放置的操作顺序是否重要ISNULL?例如,以下面的示例为例,用户可能会在字段中输入一堆空格,但我们将其输入修剪为实际NULL值以避免存储空字符串。

我正在执行以下TRIM操作ISNULL

DECLARE @Test1 varchar(16) = '    '

IF LTRIM(RTRIM(ISNULL(@Test1,''))) = ''
BEGIN
    SET @Test1 = NULL
END

SELECT @Test1
Run Code Online (Sandbox Code Playgroud)

这适当地返回一个真NULL值。现在让我们ISNULL放在外面:

DECLARE @Test2 varchar(16) = '    '

IF ISNULL(LTRIM(RTRIM(@Test2)),'') = ''
BEGIN
    SET @Test2 = NULL
END

SELECT @Test2
Run Code Online (Sandbox Code Playgroud)

这也返回一个NULL值。两者都适用于预期用途,但我很好奇 SQL 查询优化器处理此问题的方式是否有任何不同?

performance sql-server optimization t-sql query-performance

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

帮助合并语句

我想比较表中的Distinct snfromHMI_Temp到-> 如果存在,我想更新值 - 得到这个语法检查!-如果确实存在,我想插入从数据到我都试过这个语法,但我得到的错误:snHMIsnsnHMI_TempHMI

无效的列名 'cb'
无效的列名 'lp'
无效的列名 cn
无效的列名 stn

这是我的语法 - 我应该如何重写它以实现我想要的结果?

MERGE INTO HMI AS Target
USING (SELECT DISTINCT sn FROM HMI_Temp) AS Source ON Target.sn = Source.sn
WHEN NOT MATCHED THEN
INSERT (lp, cb, cn, sn, stn) VALUES (Source.lp, Source.cb, Source.cn, Source.sn, Source.stn);
Run Code Online (Sandbox Code Playgroud)

DDL:

CREATE TABLE [dbo].[HMI_Temp]
(
    [sID] [int] IDENTITY(1,1) NOT NULL,
    stn [float] NULL,
    [sn] [nvarchar](255) NULL,
    [cn] [nvarchar](max) NULL, …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2008-r2 merge

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

当 x 为空时,为什么 x <> 1 为假?

我有一个查询,当field1 <> 10.

field1为空时,这个谓词是false!

根据我的原始数学,如果null <> 10 = false,则10 = null

这样做的理由是什么?

sql-server t-sql

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

使用 oneliner sql 语句创建包含换行符的存储过程

我想将代码放在一行中,该行将创建一个包含换行符的存储过程。

  • 那可能吗?
  • 我需要使用 sp_executesql 吗?
  • 如何在 sql 语句中转义换行符?
  • 如何在字符串中转义换行符?

sql-server stored-procedures dynamic-sql t-sql

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