Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance (如果过滤器有一个单独的变量,这是最简单的-例如@其中,连接为倒数第二步)重新签名:-这允许用户调用SP(并使其工作),即使无需选择访问表-无需签名,EXEC将使用用户的权限。注:我在现实生活中从来没有签过什么东西。。。也许可以忽略它。对于我使用的大型数据_Performance_Tsql_Parameters - Fatal编程技术网

Performance (如果过滤器有一个单独的变量,这是最简单的-例如@其中,连接为倒数第二步)重新签名:-这允许用户调用SP(并使其工作),即使无需选择访问表-无需签名,EXEC将使用用户的权限。注:我在现实生活中从来没有签过什么东西。。。也许可以忽略它。对于我使用的大型数据

Performance (如果过滤器有一个单独的变量,这是最简单的-例如@其中,连接为倒数第二步)重新签名:-这允许用户调用SP(并使其工作),即使无需选择访问表-无需签名,EXEC将使用用户的权限。注:我在现实生活中从来没有签过什么东西。。。也许可以忽略它。对于我使用的大型数据,performance,tsql,parameters,Performance,Tsql,Parameters,(如果过滤器有一个单独的变量,这是最简单的-例如@其中,连接为倒数第二步)重新签名:-这允许用户调用SP(并使其工作),即使无需选择访问表-无需签名,EXEC将使用用户的权限。注:我在现实生活中从来没有签过什么东西。。。也许可以忽略它。对于我使用的大型数据集,我发现这个方法(虽然干净)比(@parm2为NULL或Field2=@parm2)慢,如果Field1是一个可为NULL的值怎么办;那么,编写COALESCE(Field1,“)=COALESCE(@parm1,Field1,”)的位置是否


(如果过滤器有一个单独的变量,这是最简单的-例如@其中,连接为倒数第二步)重新签名:-这允许用户调用SP(并使其工作),即使无需选择访问表-无需签名,EXEC将使用用户的权限。注:我在现实生活中从来没有签过什么东西。。。也许可以忽略它。对于我使用的大型数据集,我发现这个方法(虽然干净)比(@parm2为NULL或Field2=@parm2)慢,如果Field1是一个可为NULL的值怎么办;那么,编写COALESCE(Field1,“)=COALESCE(@parm1,Field1,”)的位置是否是一个好的做法呢?是的,10年后,至少在MS SQL Server中仍然如此。和你们一样,我错误地假设“若@thing为null,则语句应该短路为true,因此不需要表扫描。”。。。因此,在具有15个参数的400K线路上的每个请求需要10秒以上的时间!
(@thing IS NULL or Thing=@thing) 
WHERE Thing = ISNULL(@Thing, Thing)
DECLARE @sql nvarchar(4000)
SET @sql = /* core query */

IF @name IS NOT NULL
    SET @sql = @sql + ' AND foo.Name = @name'

IF @dob IS NOT NULL
    SET @sql = @sql + ' AND foo.DOB = @dob'

// etc

EXEC sp_ExecuteSQL @sql, N'@name varchar(100), @dob datetime',
        @name, @dob
create procedure usp_TEST_COALESCE
(
    @parm1 varchar(32) = null,
    @parm2 varchar(32) = null,
    @parm3 int = null
)
AS

SELECT * 
FROM [TableName]
WHERE Field1 = COALESCE(@parm1, Field1)
AND Field2 = COALESCE(@parm2, Field2)
AND Field3 = COALESCE(@parm3, Field3)
WHERE (id = @id OR @id IS NULL)
AND (num = @num OR @num IS NULL)
DECLARE @sql nvarchar(4000) 
DECLARE @where nvarchar(1000) =''

SET @sql = 'SELECT * FROM MyTable'

IF @Param1 IS NOT NULL 
    SET @where = @where + ' AND Field1 = @Param1'

IF @Param2 IS NOT NULL 
    SET @where = @where + ' AND Field2 = @Param2' 

IF @Param3 IS NOT NULL 
    SET @where = @where + ' AND Field3 = @Param3' 

-- Add WHERE if where clause exists, 1=1 is included because @where begins with AND
IF @where <> ''
    SET @sql = @sql + ' WHERE 1=1' + @where

--Note that we could also create order parameters and append here
SET @sql = @sql + ' ORDER BY Field1'
WHERE COALESCE(Thing,'')=COALESCE(@thing,Thing,'')