相关疑难解决方法(0)

为什么有人在SQL子句中使用WHERE 1 = 1 AND <conditions>?

为什么有人会WHERE 1=1 AND <conditions>在SQL子句中使用(通过串联字符串获得的SQL,视图定义)

我已经在某处看到这将用于防止SQL注入,但它似乎非常奇怪.

如果有注射WHERE 1 = 1 AND injected OR 1=1会产生相同的结果injected OR 1=1.

稍后编辑:视图定义中的用法如何?


谢谢您的回答.

但是,我不明白为什么有人会使用这种结构来定义视图,或者在存储过程中使用它.

以此为例:

CREATE VIEW vTest AS
SELECT FROM Table WHERE 1=1 AND table.Field=Value
Run Code Online (Sandbox Code Playgroud)

sql dynamic-sql

246
推荐指数
13
解决办法
19万
查看次数

是什么让SQL语句变得可思议?

根据定义(至少从我所见过的),sargable意味着查询能够使查询引擎优化查询使用的执行计划.我已经尝试过查找答案,但似乎没有太多关于主题的内容.所以问题是,什么做或不做一个SQL查询sargable?任何文件将不胜感激.

供参考:SARGable

sql-server performance

243
推荐指数
4
解决办法
7万
查看次数

如何在T-SQL存储过程中使用可选参数?

我正在创建一个存储过程来搜索表.我有许多不同的搜索字段,所有这些字段都是可选的.有没有办法创建一个存储过程来处理这个?假设我有一个包含四个字段的表:ID,FirstName,LastName和Title.我可以这样做:

CREATE PROCEDURE spDoSearch
    @FirstName varchar(25) = null,
    @LastName varchar(25) = null,
    @Title varchar(25) = null
AS
    BEGIN
        SELECT ID, FirstName, LastName, Title
        FROM tblUsers
        WHERE
            FirstName = ISNULL(@FirstName, FirstName) AND
            LastName = ISNULL(@LastName, LastName) AND
            Title = ISNULL(@Title, Title)
    END
Run Code Online (Sandbox Code Playgroud)

这种作品.但是它会忽略FirstName,LastName或Title为NULL的记录.如果未在搜索参数中指定Title,我想包含Title为NULL的记录 - 对于FirstName和LastName是相同的.我知道我可以用动态SQL做到这一点,但我想避免这种情况.

t-sql optional-parameters

179
推荐指数
5
解决办法
31万
查看次数

SQL WHERE子句将值与尾随空格匹配

在SQL Server 2008中,我有一个名为Zone列的表ZoneReference varchar(50) not null作为主键.

如果我运行以下查询:

select '"' + ZoneReference + '"' as QuotedZoneReference
from Zone
where ZoneReference = 'WF11XU'
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

"WF11XU "
Run Code Online (Sandbox Code Playgroud)

请注意尾随空格.

这怎么可能?如果该行的尾随空间确实存在,那么我希望返回结果,所以我假设它是SQL Server Management Studio奇怪显示的其他东西.

在C#中,代码调用zoneReference.Trim()将其删除,表明它是某种空白字符.

有人可以帮忙吗?

c# sql database sql-server sql-server-2008

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

Linq PredicateBuilder - 多个OR

我正在尝试使用PredicateBuilder,如此处所述 - http://www.albahari.com/nutshell/predicatebuilder.aspx

以下代码

var predicate = PredicateBuilder.False<StreetDTO>();

        predicate = predicate.Or(p => p.Locality.Contains(criteria.Locality));
        predicate = predicate.Or(p => p.Name.Contains(criteria.Name));
        predicate = predicate.Or(p => p.Town.Contains(criteria.Town));

        List<StreetDTO> streetData = StreetData.Instance();

        var streetList = from street in streetData.Where(predicate)
                         select street;
Run Code Online (Sandbox Code Playgroud)

根据这个例子,据我所知,这应该有效

var newKids  = Product.ContainsInDescription ("BlackBerry", "iPhone");

var classics = Product.ContainsInDescription ("Nokia", "Ericsson")
                      .And (Product.IsSelling());
var query =
  from p in Data.Products.Where (newKids.Or (classics))
  select p;
Run Code Online (Sandbox Code Playgroud)

但我得到的只是

错误1无法从用法中推断出方法'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.

我正试图在LINQ'在职'获得一些理解,所以如果这是一个简单的问题,请道歉.

c# linq

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

存储过程是否可以在"IN"子句中使用动态参数?

我想运行这样的查询:

 SELECT * FROM Studio WHERE Id IN (134, 144, 132, 138, 7432, 7543, 2566)
Run Code Online (Sandbox Code Playgroud)

但传递给IN子句的Id数量仅在运行时确定.

我是否必须使用动态SQL,还是可以使用存储过程完成?

更新: 如果有可用的选项,哪一个更好?

谢谢.

t-sql stored-procedures dynamic-sql

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

WHERE子句中的动态条件

我有一个存储过程,并想知道是否可以where基于参数建立动态条件.

让我说我有这个问题:

SELECT *
FROM tbl_Users
Run Code Online (Sandbox Code Playgroud)

现在,我有一个名为的参数@username,我想用它来建立一个动态where条件(通过我的程序可能是一个或多个条件).为了达到这样的目的,我使用以下语句:

SELECT *
FROM tbl_Users
@username -- where this parameter might hold a condition string such as "Where usr_Username = 5 and usr_first_name like '%Frank%' etc
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

t-sql dynamic where conditional-statements

4
推荐指数
1
解决办法
1217
查看次数