标签: sql-server

T-SQL中的PRINT语句

为什么T-SQL中的PRINT语句似乎有时只能工作?使用它有哪些限制?似乎有时候如果生成了一个结果集,它就变成了一个空函数,我假设它可以防止破坏结果集,但是它的输出是不是可以在另一个结果集中输出,比如行计数?

t-sql sql-server

67
推荐指数
4
解决办法
25万
查看次数

如何在T-SQL中翻转位字段?

我正在尝试使用更新查询在SQL Server中翻转一个字段,也就是说,我想将所有0都变为1,反之亦然.什么是最优雅的解决方案?

在T-SQL中似乎没有按位NOT运算符(除非我遗漏了一些明显的东西)并且我无法找到执行更新的任何其他方法.

sql t-sql sql-server

67
推荐指数
6
解决办法
3万
查看次数

SQL Server以静默方式截断存储过程中的varchar

根据这个论坛的讨论,SQL Server(我使用2005但我收集这个也适用于2000和2008)默认将varchar你指定的任何s指定为varchar的长度,即使直接插入该字符串也是如此.INSERT实际上会导致错误.例如.如果我创建此表:

CREATE TABLE testTable(
    [testStringField] [nvarchar](5) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

然后当我执行以下内容时:

INSERT INTO testTable(testStringField) VALUES(N'string which is too long')
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

String or binary data would be truncated.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

大.保留了数据完整性,并且调用者知道它.现在让我们定义一个存储过程来插入:

CREATE PROCEDURE spTestTableInsert
    @testStringField [nvarchar](5)
AS
    INSERT INTO testTable(testStringField) VALUES(@testStringField)
GO
Run Code Online (Sandbox Code Playgroud)

并执行它:

EXEC spTestTableInsert @testStringField = N'string which is too long'
Run Code Online (Sandbox Code Playgroud)

没有错误,1排受影响.将一行插入表中,testStringField格式为'strin'.SQL Server以静默方式截断存储过程的varchar参数.

现在,这种行为有时可能很方便,但我认为没有办法把它关掉.这非常烦人,因为如果我将一个字符串传递给存储过程,我希望错误.似乎有两种方法可以解决这个问题.

首先,将存储过程的@testStringField参数声明为大小为6,并检查其长度是否超过5.这看起来像是一个黑客攻击并涉及大量的样板代码.

其次,只需声明所有存储过程varchar参数varchar(max),然后让INSERT存储过程中的语句失败.

后者似乎工作正常,所以我的问题是:varchar(max)在SQL …

sql sql-server stored-procedures truncate truncation

67
推荐指数
2
解决办法
4万
查看次数

在SQL Server中,如何通过SQL注入来消除逃避单引号的卫生设施?

为了开始这个,我很清楚参数化查询是最好的选择,但我想知道是什么让我在下面提出的策略容易受到攻击.人们坚持认为下面的解决方案不起作用,所以我找一个为什么它不会这样做的例子.

如果在发送到SQL Server之前使用以下转义在代码中构建动态SQL,那么什么样的注入可以打败这个?

string userInput= "N'" + userInput.Replace("'", "''") + "'"
Run Code Online (Sandbox Code Playgroud)

这里回答类似的问题,但我不相信任何答案都适用于此.

在SQL Server中无法使用"\"转义单引号.

我相信使用Unicode进行SQL走私(此处概述)会被生成的字符串被单引号前面的N标记为Unicode这一事实所阻碍.据我所知,SQL Server没有其他字符集会自动转换为单引号.没有未转义的单引号,我不相信注射是可能的.

我不相信String Truncation也是一个可行的载体.SQL Server肯定不会截断,因为根据microsoft,a的最大大小为nvarchar2GB .在大多数情况下,2 GB的字符串是不可行的,在我的情况下是不可能的.

二阶注入是可能的,但如果可能的话:

  1. 使用上述方法清理进入数据库的所有数据
  2. 数据库中的值永远不会附加到动态SQL中(当您只能在任何动态SQL字符串的静态部分中引用表值时,为什么还要这样做?).

我并不是说这比使用参数化查询更好或者替代,但我想知道我概述的内容是如何易受攻击的.有任何想法吗?

t-sql sql-server security sanitization sql-injection

67
推荐指数
5
解决办法
4万
查看次数

查询比较SQL中的日期

我有一张日期表,所有日期都发生在11月.我写了这个查询

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
created_date <= '2013-04-12'
Run Code Online (Sandbox Code Playgroud)

此查询应返回第11个月(11月)发生的所有事件,因为它发生 "2013-04-12"日期之前(12月)

但它只返回在小于04(2013- 04 -12)的日子里发生的可用日期

可能只是比较一天的部分吗?而不是整个约会?

如何解决这个问题?

Created_date的类型为date

日期格式默认为yyyy-dd-MM

sql sql-server compare date

67
推荐指数
3
解决办法
52万
查看次数

SQL架构比较错误"目标不可用"

将Visual Studio 2015 Update 2中的SQLServer项目与数据库SQL Server 2012进行比较时,更改方向时会显示错误"目标不可用"或"源不可用".

它曾经在几个月前正常工作.有没有解决方法?我找不到任何东西.

sql-server visual-studio-2015 visual-studio-2017

67
推荐指数
6
解决办法
2万
查看次数

为什么SQL Server会抛出算术溢出错误将int转换为数据类型numeric?

运行此代码时,SQL Server Management Studio会抛出一个错误:

declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))
Run Code Online (Sandbox Code Playgroud)

但当我将数字声明更改为

declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))
Run Code Online (Sandbox Code Playgroud)

一切顺利.

数字数据类型是否有限制?

sql-server variables types numeric

66
推荐指数
4
解决办法
16万
查看次数

如何在SQL Server Management Studio中自动换行

如何为SQL Server Management Studio 2008的查询编辑器启用自动换行?

sql-server ssms editor

66
推荐指数
4
解决办法
6万
查看次数

如何在SQL Server Management Studio中以"真正的"CSV格式获得导出输出?

我有一个查询,我在SQL Server Management Studio中运行(连接到SQL Server 2005数据库).我想以CSV格式导出数据.不想要CSV格式,你只需在每一列之间加一个逗号,但是"真正的"CSV格式,你可以在字符串中加上引号.这样,您可以导出包含逗号或引号的数据.

我看到的所有例子都局限于想要的格式.我无法弄清楚引用字符串的选项在哪里.

如果SSMS真的无法实现这一基本功能,那么还有其他工具可以轻松完成吗?每次我需要数据转储时,我都不想编写C#程序.

sql-server csv ssms

66
推荐指数
6
解决办法
7万
查看次数

上次执行的特定数据库查询

我知道如何在SSMS中使用以下SQL获取最后执行的查询 -

SELECT deqs.last_execution_time AS [Time], dest.text AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)

但我想找到一个特定的数据库.如果我不需要,我不想使用SQL事件探查器.另外,我不认为SQL Profiler会允许我查看已经运行但未启用分析的查询.我需要从SSMS做到这一点.

sql-server sql-server-2012

66
推荐指数
2
解决办法
20万
查看次数