Написание динамических SQL-запросов в SQL Server 2005 - PullRequest
0 голосов
/ 19 августа 2010

Каков наилучший способ написать динамический параметризованный запрос для SQL Server 2005, где переданное значение параметра может быть нулевым?

Ответы [ 3 ]

1 голос
/ 19 августа 2010

Как насчет чего-то вроде

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 голос
/ 19 августа 2010

Только если возможно:
Напишите запрос со всеми включенными параметрами, но вместо обычного

WHERE
    field1=@param1
    and field2=@param2
    .....

запись

WHERE
    (@param1 is null or field1=@param1)
    and (@param2 is null or field2=@param2)
    ...

или

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

но если возникают серьезные проблемы с производительностью, попробуйте написать запрос для каждого отдельного случая.
ТОЛЬКО если этот запрос выполняется много раз в секунду для небольших таблиц, есть причина написать его полностью, используйте для него sp_prepare / sp_execute, поэтому в этом случае он будет выполняться быстрее.

1 голос
/ 19 августа 2010

Используйте: SP_EXECUTESQL

...