标签: t-sql

在数据库中搜索并替换部分字符串

我需要替换所有iframe标记,在我的数据库中存储为nvarchar.我可以使用以下sql-question找到条目:

SELECT * FROM databasename..VersionedFields WHERE Value LIKE '%<iframe%'
Run Code Online (Sandbox Code Playgroud)

假设我想替换以下代码段:

code before iframe <iframe src="yadayada"> </iframe> code after iframe
Run Code Online (Sandbox Code Playgroud)

有了这个:

code before iframe <a>iframe src="yadayada"</a> code after iframe
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

如何在PATINDEX模式参数中转义下划线字符?

我找到了一个用PATINDEX找到下划线位置的解决方案:

DECLARE @a VARCHAR(10)  
SET     @a = '37_21'

PRINT PATINDEX('%_%', @a)                    -- return 1 (false)
PRINT PATINDEX('%!%', REPLACE(@a, '_', '!')) -- return 3 (correct)
Run Code Online (Sandbox Code Playgroud)

你有其他想法吗?像逃避下划线角色的方式?

regex t-sql sql-server escaping sql-like

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

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

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

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

sql t-sql sql-server

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

T-SQL和WHERE LIKE%Parameter%子句

我试图编写一个使用WHERE LIKE'%text%'子句的语句,但是当我尝试使用文本参数时,我没有收到结果.例如,这有效:

SELECT Employee WHERE LastName LIKE '%ning%'
Run Code Online (Sandbox Code Playgroud)

这将返回用户Flenning,Manning,Ningle等.但是这句话不会:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%@LastName%'
Run Code Online (Sandbox Code Playgroud)

未找到结果.有什么建议?提前致谢.

sql t-sql sql-server-2008

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

在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 Server:什么是批处理语句(即使用"GO")有用?

我知道在SQL Server中GO 被认为是批处理分隔符.

我的问题是:有一个批处理分隔符有什么意义?它给你带来了什么好处,为什么要使用它?

示例:我经常看到它在SQL代码中使用如下,我不明白为什么它被认为是最佳实践.据我所知,代码在没有所有GO语句的情况下都是一样的:

USE AdventureWorks2012;
GO
BEGIN TRANSACTION;
GO
IF @@TRANCOUNT = 0
BEGIN
    SELECT FirstName, MiddleName 
    FROM Person.Person WHERE LastName = 'Adams';
    ROLLBACK TRANSACTION;
    PRINT N'Rolling back the transaction two times would cause an error.';
END;
ROLLBACK TRANSACTION;
PRINT N'Rolled back the transaction.';
GO
Run Code Online (Sandbox Code Playgroud)

(来源:technet文档):

t-sql sql-server

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

使用T-SQL进行模糊匹配

我有一个表的人与personaldata等.有很多专栏,但这里曾经感兴趣的是:addressindex,lastname以及firstnameaddressindex公寓门口钻一个独特的地址.因此,如果我"喜欢下面"两个人和lastname一个人firstnames相同,他们很可能是重复的.

我需要一种方法来列出这些重复项.

tabledata:

personid     1
firstname    "Carl"
lastname     "Anderson"
addressindex 1

personid     2
firstname    "Carl Peter"
lastname     "Anderson"
addressindex 1
Run Code Online (Sandbox Code Playgroud)

我知道如果我要在所有列上完全匹配,但是我需要模糊匹配来完成这个技巧(来自上面的例子),结果如下:

Row     personid      addressindex     lastname     firstname
1       2             1                Anderson     Carl Peter
2       1             1                Anderson     Carl
.....
Run Code Online (Sandbox Code Playgroud)

关于如何以一种好的方式解决这个问题的任何提示?

t-sql sql-server fuzzy-search

66
推荐指数
5
解决办法
14万
查看次数

如何在T-SQL中删除默认值或类似约束?

我知道语法:

ALTER TABLE [TheTable] DROP CONSTRAINT [TheDefaultConstraint]
Run Code Online (Sandbox Code Playgroud)

但是当我不知道它的名字时,如何删除默认约束?(也就是说,它是在CREATE TABLE时间自动生成的.)

sql t-sql default constraints

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

我可以在T-SQL中循环表变量吗?

反正是否在T-SQL中循环表变量?

DECLARE @table1 TABLE ( col1 int )  
INSERT into @table1 SELECT col1 FROM table2
Run Code Online (Sandbox Code Playgroud)

我也使用游标,但游标似乎不如表变量灵活.

DECLARE cursor1 CURSOR  
    FOR SELECT col1 FROM table2  
OPEN cursor1  
FETCH NEXT FROM cursor1
Run Code Online (Sandbox Code Playgroud)

我希望能够以与游标相同的方式使用表变量.这样我就可以在过程的一个部分中对表变量执行一些查询,然后为表变量中的每一行执行一些代码.

任何帮助是极大的赞赏.

sql t-sql sql-server cursor table-variable

66
推荐指数
5
解决办法
13万
查看次数

varchar(MAX)总是更好吗?

关于SQL Server,我理解:

  • var 表示内存是惰性分配的,这意味着它完全适合数据(插入时).

  • MAX 意味着没有尺寸限制\限制.

那么,使用MAX时总是优先使用varchar,因为我们无论如何都不分配整个尺寸?

只有在我们想要在此DB列上强制执行约束时,我们才应该使用常量吗?

sql t-sql sql-server

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