Use SQL dinâmico com EXEC e sp-execute-sql
O SQL dinâmico permite que você crie uma cadeia de caracteres que pode ser executada como T-SQL como uma alternativa aos procedimentos armazenados. SQL dinâmico é útil quando você não sabe certos valores até o tempo de execução.
Há duas maneiras de criar SQL dinâmico, usando:
- Palavras-chave EXECUTE ou EXEC .
- O procedimento armazenado do sistema sp_executesql.
SQL dinâmico usando EXECUTE ou EXEC
Para escrever uma instrução SQL dinâmica com EXECUTE ou EXEC, a sintaxe é:
EXEC (@string_variable);
No exemplo a seguir, declaramos uma variável chamada @sqlstring do tipo VARCHAR e, em seguida, atribuímos uma cadeia de caracteres a ela.
DECLARE @sqlstring AS VARCHAR(1000);
SET @sqlstring='SELECT customerid, companyname, firstname, lastname
FROM SalesLT.Customer;'
EXEC(@sqlstring);
GO
SQL dinâmico usando Sp_executesql
Sp_executesql permite executar uma instrução T-SQL com parâmetros. Sp_executesql pode ser usado em vez de procedimentos armazenados quando você deseja passar um valor diferente para a instrução. A instrução T-SQL permanece a mesma e apenas os valores dos parâmetros são alterados. Como os procedimentos armazenados, é provável que o otimizador de consulta do SQL Server reutilize o plano de execução.
Sp_executesql usa uma instrução T-SQL como um argumento, que pode ser uma constante Unicode ou uma variável Unicode. Por exemplo, ambos os exemplos de código são válidos:
DECLARE @sqlstring1 NVARCHAR(1000);
SET @SqlString1 =
N'SELECT TOP(10) name, listprice
FROM SalesLT.Product
GROUP BY name, listprice
ORDER BY listprice DESC;'
EXECUTE sp_executesql @SqlString1;
OR
EXECUTE sp_executesql N'SELECT TOP(10) name, listprice
FROM SalesLT.Product
GROUP BY name, listprice
ORDER BY listprice DESC;'
Neste exemplo, um parâmetro está sendo passado para a instrução T-SQL:
EXECUTE sp_executesql
N'SELECT * FROM SalesLT.Customer
WHERE CompanyName = @company',
N'@company nvarchar(128)',
@company = "Sharp Bikes";