Questions tagged «t-sql»

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

1
“和”与“&”之间的区别
我试图了解逻辑运算的优先顺序,并具有以下代码: declare @T bit ='TRUE' declare @F bit ='False' print @T and @F 它返回错误为 关键字“和”附近的语法不正确。 我用“&”替换了“ and”,并且代码再次起作用。以前的代码为什么不起作用?我正在使用SQL Server。
13 sql-server  t-sql 

4
表中的NULL值自我比较
我总是对某些神秘的t-sql行为感到困惑,如下所示 -- Create table t and insert values. use tempdb CREATE TABLE dbo.t (a INT NULL); -- insert 3 values INSERT INTO dbo.t values (NULL),(0),(1); GO set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null go -- expect 3 rows returned …

3
SQL Server的8 KB数据页未使用512字节
我已经创建了下表: CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); 然后创建一个聚集索引: CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); 接下来,我为它填充30行,每个行的大小为256字节(基于表声明): DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO dbo.TestStructure (id, filler1, filler2) VALUES …

5
在SQL Server中,有一种方法可以确定传递给正在执行的存储过程的参数的值
确定执行存储过程的一种方法是使用“动态管理”方法,如下所示: SELECT sqlText.Text, req.* FROM sys.dm_exec_requests req OUTER APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqltext 但是,这仅显示存储过程的create语句的文本。例如: CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id 理想情况下,我想查看正在运行的过程的参数是什么,从而导致该过程对于特定的有问题的参数集运行了这么长时间。 有没有办法做到这一点?(在此问题中, Aaron Bertrand提到了DBCC InputBuffer,但我认为这不适用于此问题。)

2
我计算机名称中的连字符导致T-SQL错误
我是开发人员,而不是DBA(恐怕正在显示)。我试图在我的家用计算机(名为John-PC)上运行带有SQL Server 2014 Express的Report Builder 3.0,但无法运行我的报告。 我无意中创建的用户/登录组合user = John-PC和login = John-PC\John。当我尝试通过以下方式删除条目时: Drop Login John-PC\John 我收到一个错误: '-'附近的语法不正确。 我认为问题是计算机名称中的连字符。 有没有一种方法可以解决语法错误? 还有另一种更改或删除用户的方法(我尝试从中删除,sys.server_principals但收到一个我无法进行临时更改的错误)。 我可以以某种方式为Report Builder提供一个新的用户名/登录名吗? 如果以上都不是,我可以John_PC将计算机的名称更改为还是会导致很多其他我无法想象的问题?

2
如何使Brent Ozar的sp_BlitzIndex在Azure上运行?
我从Brent Ozar的网站下载了SQL Server急救包。当我尝试通过Microsoft Sql Server Management Studio对我的主数据库运行sp_BlitzIndex脚本时,以Azure数据库服务器级管理员身份登录时,出现以下错误: 消息262,级别14,状态18,过程sp_BlitzIndex,第18行在数据库'master'中拒绝了CREATE PROCEDURE权限。 我在要测试的数据库实例上成功创建了该过程。当我执行该过程时,出现错误提示: 消息50000,级别16,状态1,行1265无效的对象名称“ mydatabase.sys.partitions”。 接下来,我尝试变得聪明,直接对master数据库运行存储过程代码,而不创建存储过程,并收到以下错误: 消息50000,级别15,状态1,行1267在此版本的SQL Server中,不支持在“ mydatabase.sys.indexes”中引用数据库和/或服务器名称。 我没有足够的信心开始玩弄大约2700行索引启发式逻辑的内部工作。是否有一种快速简便的方法来使该存储过程在Azure SQL数据库上正常工作,还是应该在其他地方寻找索引分析工具/存储过程?

1
高可用性还原SQL Server 2012数据库
我有一个始终处于高可用性模式的数据库,该数据库与另一个实例上的另一个数据库同步。如何使用从.bak文件还原到主数据库T-SQL? 我是高可用性的新手,并被告知我需要先使数据库脱离高可用性,然后才能进行还原,然后再次将其重新设置为高可用性,但我不确定。 我希望我可以在AlwaysOn仍启用的同时直接还原到主数据库,并且它将与辅助数据库自动同步。

3
隐藏从T-SQL选择输出
我正在尝试获取查询执行时间,但我也想隐藏查询输出。我只想要经过的时间-没有输出。 例 DECLARE @Start datetime DECLARE @End datetime SELECT @StartTimeWA=GETDATE() SELECT [id] ,[database_id] ,[proc_name] ,[exec_t] from [DB].[dbo].[STAT] SELECT @End=GETDATE() SELECT DATEDIFF(MS,@Start,@End) AS [Duration] 此刻,我得到查询输出,而我的持续时间却是最短的,这是我想要的唯一结果。我一直无法做到这一点,想知道是否还有其他人遇到过类似的问题?这是我想在T-SQL中执行的操作,而不是Management Studio或类似的操作。 我正在尝试监视运行select语句并向服务器报告的时间。我有一个外部监视器服务器,它将每分钟运行一次,并获取时间(花费的时间),我将随时间使用它来趋势/基线。由于当前查询吐出了选择的结果,并且我的持续时间使它歪斜了,所以我的监控服务器感到困惑。我只想要工期列。我还将对插入内容执行此操作,这将很简单,因为它不需要执行选择。 我试图纯粹在T-SQL中执行此操作。我不想使用DMV,因为我想获取运行查询时所花费的时间(快照),并检查当服务器经历各种负载级别时,时间是否随时间而变化,因为这会给我一个好主意关于查询执行时间是否改变。
13 sql-server  t-sql 


1
如何使用COLUMNS_UPDATED检查某些列是否已更新?
我有42列的表格和一个触发器,当其中38列更新时,触发器应该做一些事情。因此,如果其余4列已更改,则需要跳过逻辑。 我可以使用UPDATE()函数并创建一个大IF条件,但更喜欢做一些简短的事情。使用COLUMNS_UPDATED,我可以检查某些列是否全部已更新? 例如,检查第3、5和9列是否已更新: IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1) & 20 = 20) AND (SUBSTRING(COLUMNS_UPDATED(),2,1) & 1 = 1) ) PRINT 'Columns 3, 5 and 9 updated'; 因此,请20为column 3和的5值以及1为column的值,9因为它是在第二个字节的第一位中设置的。如果我将语句更改为OR它,则将检查列3和5或列9是否已更新? 如何OR在一个字节的上下文中应用逻辑?

1
SQL Server / T-SQL是否支持行连续以拆分长字符串?
有时我的SQL脚本包含一个或多个超长(有时甚至是愚蠢的长)字符串。通常,这些是VARBINARY表示文件/程序集的文字/常量,但有时它们是文本。 字符串很长的主要问题是某些文本编辑器不能很好地处理它们。例如,我有一个VARBINARY我在CREATE ASSEMBLY [AssemblyName] FROM 0x....语句中使用的文字,而程序集本身的大小刚好超过1 MB,相当于文本文件中的刚好超过200万个字符,因为每个字节都需要用十六进制表示法表示两个字符(例如0x1F= a 1和an F)。SQL Server Management Studio(SSMS)不能很好地处理此问题,并且在我尝试滚动浏览该行时挂起了几秒钟。实际上,某些版本(不确定是否还会发生这种情况)甚至在打开脚本时会显示关于长行的警告,该脚本的长度至少有一行。 第二个问题是,在没有启用自动换行功能的编辑器中使用或在线发布时,会使格式复杂化。这里的问题是,水平滚动条的滑块非常狭窄,即使将其稍微移动通常也会使非超长文本滚动到视线之外。 现在,T-SQL不再使用换行符甚至分号来终止命令(尽管从SQL Server 2005开始,分号是首选/推荐的分号)。因此,由于SQL Server知道如何解析每个语句以使其知道何时结束,因此似乎将长行拆分为仅由newline/ carriage-return+ 分隔的多行line-feed似乎不是不合理的。但这两种情况都不起作用。 PRINT 'Line1 Line2'; 返回(在“消息”标签中): Line1 Line2 这很有意义,因为换行符位于文字/常量内。但是,对于a执行此操作VARBINARY也不起作用。 PRINT 0x1234 5678; 给我一个错误。


2
使用来自SQL Server中另一个表的值更新表
我的数据库中有2个表。 表格1 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 | address | birthdate | ------------------------------------------------------------------------- 表#2 ----------------------------------------- | gender | address | phone | birthdate | ----------------------------------------- 在表#1的列地址和PHONE2是空的和列性别和生日的值是相同的表#2。 我怎样才能读取表#2和更新数据的地址和PHONE2表#1的值从表#2 的地址和电话列时,性别和出生日期是各行中的一样吗? 例如:这是表#1中的一些数据 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 …

3
为什么要使用master创建数据库?
我有一个简短的问题,为什么要使用我use master;来创建数据库?这是Microsoft文档中的示例 USE master ; GO CREATE DATABASE Sales ON ( NAME = Sales_dat, FILENAME = 'C:\Program Files\...\saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = Sales_log, FILENAME = 'C:\Program Files\...\salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) ;

2
与有条件的INSERT和SELECT相比,与OUTPUT进行MERGE更好吗?
我们经常遇到“如果不存在,请插入”的情况。丹·古兹曼(Dan Guzman)的博客对如何使此过程具有线程安全性进行了出色的研究。 我有一个基本表,可以简单地将一个字符串分类为一个整数SEQUENCE。在存储过程中,我需要获取该值的整数键(如果存在),或者INSERT获取它的值。dbo.NameLookup.ItemName列上有唯一性约束,因此数据完整性不会受到威胁,但是我不想遇到异常。 这不是一个,IDENTITY所以我无法获得SCOPE_IDENTITY,NULL在某些情况下该值可能是。 在我的情况下,我只需要处理INSERT桌子上的安全性,因此我试图确定使用MERGE这种更好的做法: SET NOCOUNT, XACT_ABORT ON; DECLARE @vValueId INT DECLARE @inserted AS TABLE (Id INT NOT NULL) MERGE dbo.NameLookup WITH (HOLDLOCK) AS f USING (SELECT @vName AS val WHERE @vName IS NOT NULL AND LEN(@vName) > 0) AS new_item ON f.ItemName= new_item.val WHEN MATCHED THEN UPDATE SET …

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.