Questions tagged «tsql»

T-SQL(事务结构查询语言)是Sybase ASE和Microsoft SQL Server支持的SQL功能的扩展。请勿将此标签用于MySQL,PostgreSql,Oracle(Pl / SQL)相关查询。请注意,使用LINQ编写的SQL代码也不属于该标签的一部分。该标记是专门为使用Microsoft SQL Server进行高级SQL编程而创建的。

13
列出有关SQL Server中所有数据库文件的信息
是否可以列出有关SQL Server上所有数据库的文件(MDF / LDF)的信息? 我想得到一个列表,显示哪个数据库正在使用本地磁盘上的哪些文件。 我试过的 exec sp_databases 所有数据库 select * from sys.databases 显示有关每个数据库的很多信息-但不幸的是,它没有显示每个数据库使用的文件。 select * from sys.database_files显示master数据库的mdf / ldf文件-但不显示其他数据库

9
插入与插入
我已经在MS SQL中使用T-SQL已有一段时间了,无论何时我必须将数据插入表中时,我都倾向于使用语法: INSERT INTO myTable <something here> 我知道关键字INTO在这里是可选的,我不必使用它,但是在我的情况下它逐渐成为一种习惯。 我的问题是: 使用INSERT语法vs有什么含义INSERT INTO吗? 哪一个完全符合标准? 它们在SQL标准的其他实现中均有效吗?
90 sql  sql-server  tsql 


6
在两个数据库之间添加外键关系
我在两个不同的数据库中有两个表。在table1中(在database1中)有一个称为column1的列,它是主键。现在在table2中(在database2中)有一个名为column2的列,我想将其添加为外键。 我尝试添加它,它给了我以下错误: 消息1763,级别16,状态0,第1行 不支持跨数据库外键引用。外键Database2.table2。 消息1750,级别16,状态0,第1行 无法创建约束。请参阅先前的错误。 由于表位于不同的数据库中,我该怎么办。


9
如何在T-SQL中将日期时间转换为字符串
令我惊讶的是现在还不能找到这个问题。 我有一个日期时间var,我想将其转换为字符串,以便可以将其附加到另一个字符串。我想要一种可以轻松转换回日期时间的格式。 我怎样才能做到这一点? (我想要日期部分和时间部分。)
89 sql-server  tsql 

2
对UPDLOCK,HOLDLOCK感到困惑
在研究表提示的使用时,我遇到了两个问题: 我应该使用哪些锁定提示(T-SQL)? HOLDLOCK对UPDLOCK有什么影响? 对这两个问题的回答都表明,使用时(UPDLOCK, HOLDLOCK),其他进程将无法读取该表上的数据,但是我没有看到这一点。为了进行测试,我创建了一个表并启动了两个SSMS窗口。在第一个窗口中,我运行了一个使用各种表提示从表中选择的事务。在事务运行时,我从第二个窗口运行了各种语句,以查看哪些将被阻止。 测试表: CREATE TABLE [dbo].[Test]( [ID] [int] IDENTITY(1,1) NOT NULL, [Value] [nvarchar](50) NULL, CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] 从SSMS窗口1: BEGIN TRANSACTION SELECT …

7
T-SQL:遍历一组已知值
这是我的情况: 假设我有一个存储过程,在该存储过程中,我需要在一组特定ID上调用另一个存储过程。有没有办法做到这一点? 即而不是需要这样做: exec p_MyInnerProcedure 4 exec p_MyInnerProcedure 7 exec p_MyInnerProcedure 12 exec p_MyInnerProcedure 22 exec p_MyInnerProcedure 19 做这样的事情: *magic where I specify my list contains 4,7,12,22,19* DECLARE my_cursor CURSOR FAST_FORWARD FOR *magic select* OPEN my_cursor FETCH NEXT FROM my_cursor INTO @MyId WHILE @@FETCH_STATUS = 0 BEGIN exec p_MyInnerProcedure @MyId …
89 sql  sql-server  tsql 

6
使用Exists 1或Exists存在的子查询*
我曾经这样写过EXISTS检查: IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Where Columns=@Filters END 前世的一位DBA告诉我,当我做一个EXISTS子句时,请使用SELECT 1而不是SELECT * IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters END 这真的有区别吗?
88 sql  sql-server  tsql 

2
varchar(max)变量的最大大小
在过去的任何时候,如果有人问我a的最大大小varchar(max),我都会说2GB,或者查找更准确的数字(2 ^ 31-1或2147483647)。 但是,在最近的一些测试中,我发现varchar(max)变量显然可以超过此大小: create table T ( Val1 varchar(max) not null ) go declare @KMsg varchar(max) = REPLICATE('a',1024); declare @MMsg varchar(max) = REPLICATE(@KMsg,1024); declare @GMsg varchar(max) = REPLICATE(@MMsg,1024); declare @GGMMsg varchar(max) = @GMsg + @GMsg + @MMsg; select LEN(@GGMMsg) insert into T(Val1) select @GGMMsg select LEN(Val1) from T 结果: …
88 sql-server  tsql 

6
计算两点之间的距离(纬度,经度)
我正在尝试计算地图上两个位置之间的距离。我已在数据中存储:经度,纬度,X POS,Y POS。 我以前一直在使用以下代码段。 DECLARE @orig_lat DECIMAL DECLARE @orig_lng DECIMAL SET @orig_lat=53.381538 set @orig_lng=-1.463526 SELECT *, 3956 * 2 * ASIN( SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2) + COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180) * POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) )) AS …

1
如何获取多个列以用于游标循环?
当我尝试在游标循环内运行以下SQL代码段时, set @cmd = N'exec sp_rename ' + @test + N',' + RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN''' 我收到以下消息, 消息15248,级别11,状态1,过程sp_rename,第213 行参数@objname不明确或声明的@objtype(COLUMN)错误。 有什么问题,我该如何解决?我尝试将列名称包装在方括号中[],并使用双引号括起来,""例如建议的某些搜索结果。 编辑1- 这是整个脚本。如何将表名传递给重命名sp?我不确定该怎么做,因为列名在许多表之一中。 BEGIN TRANSACTION declare @cnt int declare @test nvarchar(128) declare @cmd nvarchar(500) declare Tests cursor for SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'pct%' AND TABLE_NAME LIKE 'TestData%' …

4
可以使用DISTINCT进行分区函数COUNT()的覆盖
我正在尝试编写以下内容,以便获得不同的NumUser的总运行量,如下所示: NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth]) Management Studio对此不太满意。当我删除DISTINCT关键字时,错误消失了,但是不会有明显的区别。 DISTINCT在分区功能中似乎不可行。我该如何找到不同的计数?我是否使用更传统的方法,例如相关子查询? 进一步研究一下,也许这些OVER功能与Oracle的工作方式不同,无法使用它们SQL-Server来计算运行总计。 我在SQLfiddle上添加了一个实时示例,在该示例中,我尝试使用分区函数来计算运行总计。


4
为什么当xact_abort打开时,Sql Server在raiserror之后仍继续执行?
我只是对TSQL中的某些东西感到惊讶。我以为如果打开xact_abort,调用类似 raiserror('Something bad happened', 16, 1); 将停止执行存储过程(或任何批处理)。 但是我的ADO.NET错误消息恰恰相反。在异常消息中我同时收到了raiserror错误消息,以及在此之后发生的下一件事。 这是我的解决方法(无论如何,这是我的习惯),但似乎没有必要: if @somethingBadHappened begin; raiserror('Something bad happened', 16, 1); return; end; 文档说: 当SET XACT_ABORT为ON时,如果Transact-SQL语句引发运行时错误,则整个事务将终止并回滚。 这是否意味着我必须使用显式事务?
87 sql  sql-server  tsql 

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.