Questions tagged «t-sql»

Transact-SQL(T-SQL)是Microsoft SQL Server和SAP的Sybase使用的SQL的方言。

5
如何隐藏/禁用表而不删除表以检查冗余?
我必须维护和扩展一个旧的旧系统,其中包含不再使用的Web服务方法和数据库表。由于我不能完全确定这些表是否确实是多余的,因此恐怕会删除它们。 还有其他方法可以达到相同的效果(不能再使用表)而不删除它们吗?我的想法是将它们Deleted从当前的默认设置转移到其他模式(例如)dbo。 IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'Deleted') BEGIN EXEC('CREATE SCHEMA Deleted') END ALTER SCHEMA Deleted TRANSFER dbo.TableName; 架构方法是否还有其他选择或有任何缺点?

2
有关PIVOT查询的帮助
我有一个具有以下结构的表: CREATE TABLE [dbo].[AUDIT_SCHEMA_VERSION]( [SCHEMA_VER_MAJOR] [int] NOT NULL, [SCHEMA_VER_MINOR] [int] NOT NULL, [SCHEMA_VER_SUB] [int] NOT NULL, [SCHEMA_VER_DATE] [datetime] NOT NULL, [SCHEMA_VER_REMARK] [varchar](250) NULL ); 一些示例数据(似乎是sqlfiddle的问题。因此,请放置一些示例数据): INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,7,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored …

2
MERGE是否使用tempdb?
考虑以下查询: MERGE [Parameter] with (rowlock) AS target USING (SELECT @AreaId, @ParameterTypeId, @Value) AS source (AreaId, ParameterTypeId, Value) ON (target.AreaId = source.AreaId AND target.ParameterTypeId = source.ParameterTypeId) WHEN MATCHED THEN UPDATE SET target.Value = source.Value, @UpdatedId = target.Id WHEN NOT MATCHED THEN INSERT ([AreaId], [ParameterTypeId], [Value]) VALUES (source.AreaId, source.ParameterTypeId, source.Value); 统计信息I / …
12 sql-server  t-sql 

2
将列别名放在列定义的开始或结尾之间有什么区别吗?
我一直都将列别名写为 SELECT 1 as ColumnName 但是今天遇到了一个使用了 SELECT ColumnName = 1 这两个查询的执行方式有何不同?还是在DBA中有关于使用哪个标准的标准? 我个人认为,第二个会更容易阅读/(很好的例子保持更长的列定义在这里从这篇文章),但我从来没有见过,所以今天很奇怪,之前使用的第二语法,如果有某种原因,我不应该使用它。



1
为测试数据生成大字符串
我最近试图在此处创建一些包含通用测试数据的大字符串。看来我以前知道一种乘字符串的方法。但是,我不再记得语法。 我正在寻找类似的东西: SELECT 'A' + ('a' * 1000) + 'ha!' 提出“ Aaaaaaaaaaaaaaaaaha!” (当然,要长得多。) 在T-SQL中这可能吗?(或者我在想其他语言吗?)另外,还有其他生成大字符串的技术吗?
12 sql-server  t-sql 

5
如何限制一个人一次可以运行的SQL存储过程?
我有一个存储过程,基本上从一个表中选择值,然后将它们插入到另一个表中,这是一种归档。我想避免多个人同时执行此操作。 在运行此过程时,我不希望其他任何人都可以启动该过程,但是我不希望序列化,而在完成后,其他人可以运行该过程。 我想要的是给其他尝试启动该程序的人,同时我正在运行该程序。 我已经尝试过使用sp_getapplock,但是我无法完全阻止该人运行该过程。 我还尝试使用sys.dm_exec_requests查找该过程并阻止该过程,尽管这确实可行,但我认为它不是最佳选择,因为在某些服务器上我没有运行sys.dm_exec_sql_text(sql_handle)的权限。 我这样做的最佳方法是什么?

4
MS-SQL上是否有任何(隐藏的)内置函数来取消引用对象名称?
有时,我在某些数据库中存储对象名称(标识符),例如在某些参数表中。因为我使用'='或'LIKE'比较运算符从这些表中选择记录,所以我必须注意始终使用括号将这些名称存储起来。 IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = '[TABLE_NAME]'; 要么 IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = 'TABLE_NAME'; 但是,MS-SQL具有一些函数,您可以在其中使用带括号或不带括号的对象名称,例如OBJECT_ID()函数。我在dbfiddle.uk上建立了一个最小的示例。 CREATE TABLE TEST ( ID INT IDENTITY(1,1) PRIMARY KEY, OBJECT sysname NOT NULL ); GO INSERT INTO TEST VALUES ('[obj1]'),('obj2'),('obj3'),('[obj4]'); GO 现在,我可以使用OBJECT_ID()来检查表TEST是否以这种方式存在: IF OBJECT_ID('TEST') IS NOT NULL …
12 sql-server  t-sql 

2
存储过程中的事务
我需要在单个事务中执行UPDATE和INSERT。该代码本身可以正常工作,但是我希望能够轻松地调用它并传递所需的参数。当我尝试将此事务嵌套在存储过程中时,我遇到许多语法错误。 如何封装以下代码,以便可以轻松调用它? BEGIN TRANSACTION AssignUserToTicket GO DECLARE @updateAuthor varchar(100) DECLARE @assignedUser varchar(100) DECLARE @ticketID bigint SET @updateAuthor = 'user1' SET @assignedUser = 'user2' SET @ticketID = 123456 UPDATE tblTicket SET ticketAssignedUserSamAccountName = @assignedUser WHERE (ticketID = @ticketID); INSERT INTO [dbo].[tblTicketUpdate] ([ticketID] ,[updateDetail] ,[updateDateTime] ,[userSamAccountName] ,[activity]) VALUES (@ticketID, 'Assigned ticket to …

3
根据时间间隔对记录进行分组
我有一个具有以下模式的表,我需要定义一个查询,该查询可以基于时间间隔(例如每分钟记录数)对数据进行分组,然后提供自上一组以来对SnapShotValue所做的更改的总和。目前,SnapShotValue始终递增,因此我只需要求和。任何人都可以帮助执行此操作的SQL Server T-SQL查询吗?我愿意更改架构,但这是我目前拥有的。 架构图 CaptureTime (datetime) SnapShotValue (int) 样本数据 1 Jan 2012 00:00:00, 100 1 Jan 2012 00:00:30, 125 1 Jan 2012 00:01:00, 200 1 Jan 2012 00:01:30, 300 1 Jan 2012 00:02:15, 400 1 Jan 2012 00:02:30, 425 1 Jan 2012 00:02:59, 500 所需的查询结果 1 Jan 2012 00:01:00, 225 …

1
将存储过程的结果插入表变量
我有一个存储过程,将值存储在表变量中。我选择这些值并在调用过程时将其返回。 我试图在另一个表变量中设置这些返回值,但我无法弄清楚。 存储过程 ALTER PROCEDURE [dbo].[GetOrSetDomainId] @DomainName varchar(50), @DomainUrl varchar(50) AS BEGIN DECLARE @DomainId bigint; DECLARE @NumberOfRwos bigint; DECLARE @DomainHistory TABLE ( DomainId bigint, HasHistory bit, ServerOnline bit, DatabaseOnline bit, ServerPerformance bigint, DatabasePerformance bigint, SoldTickets bigint ) SELECT @NumberOfRwos = COUNT(Id) FROM DomainData WHERE DomainName = @DomainName OR DomainUrl = …

2
如何使用T-SQL(不是SSMS)将登录名映射到数据库
我正在编写一个程序,要求我分配代码中的所有权限和所有内容。我陷入了这一部分: 我只想做相当于单击msdb数据库的“地图”下的小框,然后将该用户分配给SqlAgentUser角色的等效操作。我需要一个用户才能添加/编辑SQL Server代理作业。我可以使用SSMS正确进行设置,但是我一生都无法弄清楚如何在原始SQL中进行设置。 我已经研究过ALTER LOGIN,但是没有看到任何可以满足我需求的东西。我怀疑我只是不知道Google的正确用语。我通常不会做这种事情。 任何帮助深表感谢!

4
列出作业,计划和下一个计划的运行日期时间
列出作业,计划和下一个计划的运行日期时间 我正在尝试列出作业,计划和下一个计划的运行日期时间。但是,我似乎没有成功。 sysjobactivity 有next_scheduled_run_date,这是我需要的,但是我不知道将其连接到Job和Schedule。 如果还有其他方法sysjobactivity,请引导我到那里。 SELECT sj.name AS jobName , ss.name AS scheduleName , sja.next_scheduled_run_date FROM msdb.dbo.sysjobs sj INNER JOIN msdb.dbo.sysjobactivity sja ON sja.job_id = sj.job_id INNER JOIN msdb.dbo.sysjobschedules sjs ON sjs.job_id = sja.job_id INNER JOIN msdb.dbo.sysschedules ss ON ss.schedule_id = sjs.schedule_id WHERE (sj.name LIKE 'xray%') AND (sja.next_scheduled_run_date > GETDATE())

3
将逗号作为小数点分隔符的字符串数值转换为NUMERIC(10,2)
我有一个varchar列的SQL表,其中包含希腊格式的数字(。作为千位分隔符,而逗号作为十进制分隔符) 经典转换 CONVERT(numeric(10,2),REPLACE([value],',','.')) 不起作用,因为。(千位分隔符)杀死转换 例如尝试 CONVERT(numeric(10,2),REPLACE('7.000,45',',','.')) 我想将这些值转换为数字(10,2) 关于如何处理的任何建议?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.