Usar a variável na instrução semelhante ao SQL
eu tenho um sproc (MSSQL 2k5) que vai tomar uma variável para um tal claus como assim:
DECLARE @SearchLetter2 char(1)
SET @SearchLetter = 't'
SET @SearchLetter2 = @SearchLetter + '%'
SELECT *
FROM BrandNames
WHERE [Name] LIKE @SearchLetter2 and IsVisible = 1
--WHERE [Name] LIKE 't%' and IsVisible = 1
ORDER BY [Name]
infelizmente, a linha actualmente em execução lança um erro de sintaxe, enquanto que a cláusula comentada onde a cláusula é executada muito bem. Alguém me pode ajudar a pôr a linha Sem comentários a funcionar?
8 answers
Se estiver a utilizar um procedimento armazenado:
ALTER PROCEDURE <Name>
(
@PartialName VARCHAR(50) = NULL
)
SELECT Name
FROM <table>
WHERE Name LIKE '%' + @PartialName + '%'
ALTER PROCEDURE <Name>
(
@PartialName VARCHAR(50) = NULL
)
SELECT Name
FROM <table>
WHERE Name LIKE '%' + LTRIM(RTRIM(@PartialName)) + '%'
Declarar @SearchLetter2 char (1)
Coloque isto numa escala maior.
Isto funciona para mim na amostra de Northwind DB, note que o pesquisador tem 2 caracteres e o pesquisador também tem de ser declarado para que isto funcione:
declare @SearchLetter2 char(2)
declare @SearchLetter char(1)
Set @SearchLetter = 'A'
Set @SearchLetter2 = @SearchLetter+'%'
select * from Customers where ContactName like @SearchLetter2 and Region='WY'
O "char (número)" é o comprimento da variável.
Se temos uma mesa com "nomes" como por exemplo [Test1..Test200] e declaramos char (5) em SELECT like:
DECLARE @variable char(5)
SET @variable = 'Test1%'
SELECT * FROM table WHERE Name like @variable
O resultado será apenas - "Test1"! (char (5) - 5 chars in lenght; Test11 is 6)
O resto dos potenciais dados interessados como [Test11..Test200] não será devolvido no resultado.
Não faz mal se quisermos limitar a selecção desta forma. Mas se não é uma forma intencional de o fazer pode devolver resultados incorrectos do planeado. ( Como " todos os nomes começam com o Test1..." ).
Na minha opinião, se não soubermos o valor exacto de um determinado valor, uma solução melhor poderia ser algo como esta:DECLARE @variable varchar(max)
SET @variable = 'Test1%'
SELECT * FROM <table> WHERE variable1 like @variable
Isto devolve(Test1, mas também Test11..Ensaio 19 e ensaio 100..Test199).
DECLARE @SearchLetter CHAR(1)
SET @SearchLetter = 'A'
SELECT *
FROM CUSTOMERS
WHERE CONTACTNAME LIKE @SearchLetter + '%'
AND REGION = 'WY'
Ou da seguinte forma, se tivermos de adicionar todos os caracteres de pesquisa, então,
DECLARE @SearchLetter CHAR(1)
SET @SearchLetter = 'A' + '%'
SELECT *
FROM CUSTOMERS
WHERE CONTACTNAME LIKE @SearchLetter
AND REGION = 'WY'
Ambos funcionarão
Pode ser tão simples como LIKE '%%[%3]%%'
ser {[1] } a variável de entrada.
Isto funciona comigo com SAP B1 9.1