Questions tagged «tsql»

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

9
在SQL Server中设置日期
在SQL Server中,如何将DATETIME“设置”到秒/分钟/小时/天/年? 假设我的日期为2008-09-17 12:56:53.430,那么flooring的输出应为: 年份:2008-01-01 00:00:00.000 月:2008-09-01 00:00:00.000 日期:2008-09-17 00:00:00.000 时间:2008-09-17 12:00:00.000 分钟:2008-09-17 12:56:00.000 第二名:2008-09-17 12:56:53.000
71 sql-server  tsql 

6
将列添加到表,然后在事务内更新它
我正在创建一个将在MS SQL服务器中运行的脚本。该脚本将运行多个语句,并且需要进行事务处理,如果其中一个语句失败,则将停止整体执行并回滚所有更改。 在发出ALTER TABLE语句向表中添加列,然后更新新添加的列时,我在创建此事务模型时遇到了麻烦。为了立即访问新添加的列,我使用GO命令执行ALTER TABLE语句,然后调用我的UPDATE语句。我面临的问题是我无法在IF语句中发出GO命令。在我的交易模型中,IF语句很重要。这是我尝试运行的脚本的示例代码。还请注意,发出GO命令将丢弃@errorCode变量,并且需要在使用之前在代码中声明下来(此代码不在下面的代码中)。 BEGIN TRANSACTION DECLARE @errorCode INT SET @errorCode = @@ERROR -- ********************************** -- * Settings -- ********************************** IF @errorCode = 0 BEGIN BEGIN TRY ALTER TABLE Color ADD [CodeID] [uniqueidentifier] NOT NULL DEFAULT ('{00000000-0000-0000-0000-000000000000}') GO END TRY BEGIN CATCH SET @errorCode = @@ERROR END CATCH END …

6
如何通过SQL Server中的SQL注入来克服单引号引起的卫生问题?
首先,我很清楚参数化查询是最好的选择,但是我在问什么使下面介绍的策略易受攻击。人们坚持认为以下解决方案无效,因此我在寻找一个示例说明为何不可行。 如果动态SQL在发送到SQL Server之前使用以下转义代码内置在代码中,则哪种注入方式可以克服这种情况? string userInput= "N'" + userInput.Replace("'", "''") + "'" 这里回答了类似的问题,但我认为任何答案都不适用于这里。 在SQL Server中,不能用“ \”转义单引号。 我相信使用Unicode的SQL走私(在此处概述)会因生成的字符串被单引号前面的N标记为Unicode而受到阻碍。据我所知,SQL Server不会自动将其他字符集转换为单引号。没有单引号的转义,我认为注入是不可能的。 我也不认为String Truncation是可行的方法。根据Microsoft的说法, SQL Server肯定不会进行截断,因为一个的最大大小为nvarchar2GB 。2 GB的字符串在大多数情况下是不可行的,在我的情况下是不可能的。 二阶注入是可能的,但在下列情况下是可能的: 使用上述方法对进入数据库的所有数据进行清理 数据库中的值永远不会附加到动态SQL中(为什么只要可以在任何动态SQL字符串的静态部分中引用表值,您仍然会这样做吗?)。 我并不是说这比使用参数化查询更好或替代,但是我想知道我概述的内容是多么容易受到攻击。有任何想法吗?

4
根据单个不同的列选择唯一的行
我想选择具有的行distinct email,请参见下面的示例表: +----+---------+-------------------+-------------+ | id | title | email | commentname | +----+---------+-------------------+-------------+ | 3 | test | rob@hotmail.com | rob | | 4 | i agree | rob@hotmail.com | rob | | 5 | its ok | rob@hotmail.com | rob | | 6 | hey | rob@hotmail.com | rob …
71 sql-server  tsql 



5
了解CUBE和ROLLUP之间的区别
我的作业要求我找出“每个日期写了多少张发票?” 我有点被困住了,向我的教授寻求帮助。她通过电子邮件向我发送了一个查询,该查询将回答以下问题:“每种类型和版本的炉灶数量已制成?要挑战但不要加分,请包括炉灶总数”。 这是她向我发送的查询: SELECT STOVE.Type + STOVE.Version AS 'Type+Version' , COUNT(*) AS 'The Count' FROM STOVE GROUP BY STOVE.Type + STOVE.Version WITH ROLLUP; 因此,我调整了该查询,直到满足我的需求为止。这是我想出的: SELECT InvoiceDt , COUNT(InvoiceNbr) AS 'Number of Invoices' FROM INVOICE GROUP BY InvoiceDt WITH ROLLUP ORDER BY InvoiceDt ASC; 它返回了我想要的以下结果。 无论如何,我决定阅读ROLLUP子句,并从Microsoft的文章开始。它说ROLLUP子句类似于CUBE子句,但是它通过以下方式与CUBE子句区分开: 多维数据集生成结果集,该结果集显示所选列中所有值组合的汇总。 ROLLUP生成一个结果集,该结果集显示所选列中值层次结构的聚合。 因此,我决定将查询中的ROLLUP替换为CUBE以查看会发生什么。他们产生了相同的结果。我想那是我感到困惑的地方。 看起来,如果您使用的是我在这里使用的查询类型,则这两个子句之间没有任何实际区别。是对的吗?还是我不了解某事?我曾经想过,当我阅读完Microsoft文章时,使用CUBE子句的结果应该有所不同。

3
插入没有值的表的语法?
我有一个使用以下架构创建的表: CREATE TABLE [dbo].[Visualizations] ( VisualizationID int identity (1,1) NOT NULL ) 由于该表没有可设置的字段,因此我不确定如何插入记录。我试过了: INSERT INTO [Visualizations]; INSERT INTO [Visualizations] () VALUES (); 都不起作用。正确的语法是什么? 编辑:由于许多人似乎对我的表感到困惑,因此它仅用于表示许多子表的父表...每个人都通过FK引用此表,而每个FK都是PK,因此跨所有在这些表中,ID是唯一的。
70 sql  sql-server  tsql  insert 

6
从SQL联盟中删除重复项
我正在使用联合(对或错)在一些表上做一些基本的sql 但我需要删除重复项。有任何想法吗? select * from calls left join users a on calls.assigned_to= a.user_id where a.dept = 4 union select * from calls left join users r on calls.requestor_id= r.user_id where r.dept = 4
70 sql  tsql 

5
为什么我不能在SQL Management Studio的开始/结束块中使用“创建模式”?
我生成了一个脚本,该脚本创建了该数据库的所有用户和模式,当我用IF EXISTS检查包装CREATE语句时,我发现它不允许CREATE SCHEMA调用在BEGIN / END块中运行。它抱怨说这是无效的语法。但是我可以自己运行命令。下面是代码示例。我正在使用SQL Server 2008和Management Studio R2。为什么此语法无效? --DROP SCHEMA [acme] IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme')) BEGIN CREATE SCHEMA [acme] AUTHORIZATION [dbo] END
70 sql  sql-server  tsql 

5
为什么RAISERROR拼写错误?还是不是?
为什么不RAISERROR拼写RAISEERROR?第二个E在哪里?我可以理解这是否是一些古老的关键字长度限制,但我不希望它是9个字符的限制。 RAIS或RROR是一个技术性词汇,使“ raise-error”只是一种误读吗?(直接的)起源是否使用不同的语言? 我已经搜索过Google,但是在该主题上找不到太多。
70 tsql 

13
如何从查询中返回SQL数据类型?
我有一个SQL查询,它查询我不需要也不想理解的巨大数据库(例如,数百个视图/表,具有难以理解的名称,例如CMM-CPP-FAP-ADD)。该查询的结果需要存储在登台表中以提供报告。 我需要创建登台表,但是要挖掘成百上千个视图/表以查找此处表示的数据类型,我想知道是否有更好的方法来构造该表。 谁能建议我如何使用任何SQL Server 2008工具来判断SQL 2000数据库中的源数据类型? 作为一个一般的例子,我想从一个查询中知道: SELECT Auth_First_Name, Auth_Last_Name, Auth_Favorite_Number FROM Authors 除了实际结果,我想知道: Auth_First_Name is char(25) Auth_Last_Name is char(50) Auth_Favorite_Number is int 我对约束不感兴趣,我真的只想知道数据类型。



1
添加新列后,SQL Server无效列名
我只是通过SSMSDesigner通过数据向现有表添加了一个标识列,该表更新良好,并且可以针对该表成功运行选择查询,但是查询完成后,我注意到新列用红色下划线标出,并带有错误指示这是无效的列名。 为什么会发生这种情况?如果列无效,我希望查询失败。 SSMS是否保留对必须刷新的旧表的某种内部引用? 我尝试关闭数据库连接并重新打开它,但仍然是相同的错误。不知道我在这里想念的是什么。 SELECT TOP 100 [PRIMARY_NDX_Col1], [NEW_Col], --QUERY EXECUTES SUCCESSFULLY, BUT THIS IS UNDERLINED RED AS AN INVALID COLUMN [Col3] FROM [dbo].[MyTable]

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.