为什么有人会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) 根据定义(至少从我所见过的),sargable意味着查询能够使查询引擎优化查询使用的执行计划.我已经尝试过查找答案,但似乎没有太多关于主题的内容.所以问题是,什么做或不做一个SQL查询sargable?任何文件将不胜感激.
供参考:SARGable
我正在创建一个存储过程来搜索表.我有许多不同的搜索字段,所有这些字段都是可选的.有没有办法创建一个存储过程来处理这个?假设我有一个包含四个字段的表: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做到这一点,但我想避免这种情况.
在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()将其删除,表明它是某种空白字符.
有人可以帮忙吗?
我正在尝试使用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'在职'获得一些理解,所以如果这是一个简单的问题,请道歉.
我想运行这样的查询:
SELECT * FROM Studio WHERE Id IN (134, 144, 132, 138, 7432, 7543, 2566)
Run Code Online (Sandbox Code Playgroud)
但传递给IN子句的Id数量仅在运行时确定.
我是否必须使用动态SQL,还是可以使用存储过程完成?
更新: 如果有可用的选项,哪一个更好?
谢谢.
我有一个存储过程,并想知道是否可以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 ×3
c# ×2
dynamic-sql ×2
sql ×2
sql-server ×2
database ×1
dynamic ×1
linq ×1
performance ×1
where ×1