我有一些代码可以帮助每天在我们的 SQL Server 上自动检查错误日志。此代码调用xp_readerrorlog 0来检查错误日志,并调用 xp_readerrorlog 0,1来检查 SQL Server 日志。
然而,有时我需要扫描不止一个错误日志。
我希望能够通过 T-SQL 查看日志的日期,或者除此之外,找到存在的日志数量。
我读到我们最多可以有 99 个存档日志,但是当尝试显示不存在的错误日志时,服务器会抛出以下错误消息。
“xp_readerrorlog() 返回错误 2,'系统找不到指定的文件。”
我知道日期信息和数字存在,因为 SSMS 显示它(见下图。)
我正在尝试运行一个递归更改表,从我的 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 语句来在 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) 如果我的结果为空或空,我希望它不要在字符串前添加逗号。我怎样才能做到这一点?
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) 是否可以使用 T-SQL 编写数据库图表的创建脚本?
如果不是,当您使用数据库图表设计器保存/编辑图表时(它是使用 PowerShell 还是其他某种语言来保存和加载这些类型的对象),它在做什么?
我问是因为我希望自动创建数据库图表。我有一个我的开发人员编写的工具(在 C# 中),它根据它对我们供应商数据所做的一些 Web 服务调用的响应自动创建表及其外键关系。
我正在尝试跨多个数据库运行如下查询
select ParamValue from Table1 where paramname = 'SYSTEM_LICENSE'
Run Code Online (Sandbox Code Playgroud)
每个 DB 的名称类似于下面的名称,并且应排除某些 DB。
“客户_123”
我查看了使用 sp_MSforeachdb,但它不受支持并且运行不佳。我试图弄清楚如何编写游标,但没有成功。在这一点上,只是寻求可以真正写出我想要做的事情的人的帮助。
LTRIM与RTRIM结合使用时,您放置的操作顺序是否重要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 查询优化器处理此问题的方式是否有任何不同?
我想比较表中的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) 我有一个查询,当field1 <> 10.
当field1为空时,这个谓词是false!
根据我的原始数学,如果null <> 10 = false,则10 = null。
这样做的理由是什么?
我想将代码放在一行中,该行将创建一个包含换行符的存储过程。
sql-server ×10
t-sql ×10
cursors ×1
dynamic-sql ×1
error-log ×1
merge ×1
optimization ×1
performance ×1
security ×1