2010-08-19 60 views

回答

1

利用:SP_EXECUTESQL

+0

矿是不是存储过程这是一个参数化查询 – NoviceToDotNet 2010-08-19 09:59:43

+0

转到链接,看到了DOUCMENT及其所有人都在谈论EXCUETING动态参数QUERY – 2010-08-19 10:00:54

+0

你是正确的,但请礼貌;) – abatishchev 2010-08-20 07:33:52

1

如何像

DECLARE @Table TABLE(
     val1 VARCHAR(20), 
     val2 VARCHAR(20) 
) 

DECLARE @Param VARCHAR(20) 

INSERT INTO @Table SELECT '1','2' 
SELECT * 
FROM @Table 
WHERE (@Param IS NULL OR val1 = @Param) 

然而,这会降低性能。 我会建议,当你建立你的动态查询时,不要将参数添加到where子句,如果它不是需要的。

1

只有可能:
编写查询所有的参数包括,但不是写一个普通的

WHERE 
    [email protected] 
    and [email protected] 
    ..... 

WHERE 
    (@param1 is null or [email protected]) 
    and (@param2 is null or [email protected]) 
    ... 

WHERE 
    field1=isnull(@param1,field1) 
    and field2=isnull(@param2,field2) 
    ... 

但如果出现严重的性能问题,请考虑为每个单个案例编写查询。
只有当这个查询在小表上每秒钟执行许多次时,才有理由完整地写它,使用sp_prepare/sp_execute作为它,所以它在这种情况下运行速度最快。

+0

首先让我知道你如何格式化在评论中写的代码,以便我可以以格式化的形式向您发送我的代码 – NoviceToDotNet 2010-08-19 10:04:20

+0

有一个JS在本网站上运行,它会自动格式化它。在写出问题或答案时,请在每行至少加上4个空格(不适用于评论)。或者你可以在这个网站上使用WYSIWYG编辑器的工具面板。我手动添加的空格/标签,因为该网站不管理这些空间/标签。 – AlexanderMP 2010-08-19 10:07:15

+0

我还能做些什么来保持性能 我想知道一些代码,请按照以上方法让我知道吗? – NoviceToDotNet 2010-08-19 16:51:35