2013-02-22 2 views
1

Google 및 스택 오버플로를 통해 여러 가지 검색을 수행했으며 거기에 대한 답변이있는 경우 검색 쿼리를 제공하지 못했습니다. 내가 찾고있는 대답.SQL 쿼리에 매개 변수가 있는지 확인하는 가장 좋은 방법

내 ASP.net 웹 사이트에서 Microsoft SQL Server DB에 연결하고 쿼리를 수행하는 모든 더러운 작업을 처리하는 데 사용할 함수 모듈을 작성합니다. 현재 쿼리를 수행하고 SQL 매개 변수 배열 인 선택적 함수 매개 변수를 허용하기로 결정한 함수를 작업하고 있습니다.

전달 된 선택적 SQL 매개 변수가있는 함수에서 명명 된 매개 변수가 있는지 확인하기 위해 전달 된 SQL 쿼리를 확인하고 싶습니다. SQL 쿼리에 명명 된 매개 변수가 있으면 선택적 SQL 매개 변수가 실제로 전달되었는지 확인하십시오. SQL 쿼리에 명명 된 매개 변수가없는 경우 SQL 매개 변수가 전달되지 않았는지 확인하십시오. 예를 들어 :

  • SQL 쿼리 = SELECT * FROM MyTable WHERE ID = @TheID → 함수 호출은 SQL 매개 변수가 있어야합니다.
  • SQL 쿼리 = SELECT GETDATE() → 함수 호출에 SQL 매개 변수가 없어야합니다.

모든 사람에게 나의 질문은 거기 밖으로 무엇을 (매개 변수의 이름을 모른 채) 명명 된 매개 변수에 대한 SQL 쿼리입니다 문자열을 '검색'하는 가장 좋은 방법입니다. 그 문자로 이름이 지정된 열 (예 : [[email protected]])을 가질 수있는 곳을 읽었 기 때문에 '@'문자의 문자열을 검색하는 데주의해야합니다. 아마도 정규식을 사용하여 '='다음에 공백 문자와 '@'가 오는 지 검색 할 수 있습니까?

+0

가 포함되어있는 경우

function checkQuery (byVal myQuery As String) return not instr(myQuery,"@") == 0 end function 

는 true를 돌려겠습니까, 당신은 .NET 용 – Scotch

+0

'@@'사용 일부 시스템 기능을위한 접두어로 사용됩니다. –

+0

고맙습니다, Damien, 그 사실을 상기시켜 주 시겠지요. 내가 쓰는 코드에서는 그렇게 할 수 없을 가능성이 높지만, 완성도와 견고한 코드에 대한 모든 가능성을 확인해 주셔서 감사합니다! –

답변

0

@ 문자를 사용할 수없는 이유는 없습니다. 이름이 변수가 아니고 열이 아니기 때문에 @이 없어야합니다. 변수가 없습니다. @([email protected])

체크 아웃 sp_executesql입니다. 그것은 당신의 쿼리 LIKE 나는 "사용합니다"@ "

+0

나는 매개 변수 이름 (변수 이름)에'@'이있을 것이라고 말하는 것이 아닙니다. 나는 거기에'@'문자가있는 열 이름이 있거나 SQL 쿼리의 인라인 주석 인 @ aaron-bertrand가 암시 된 것처럼 말하고있었습니다. –

0

을하려는 것과 매우 유사한 무언가를 좋은 예입니다 '* @ *'또는 LIKE '% @ %', 와일드 카드 연산자에 따라 (SQL 서버 와일드 카드 연산자가 순간에 내 마음을 여깁니다) 편집 : asp.net instr() 함수를 사용하십시오
+0

내 쿼리가'SELECT/* @foo */* FROM dbo.table; 또는'SELECT [foo @ bar] FROM dbo. [my @ table]; 주석과 잘 못된 엔티티는 오탐 (false positive)을 초래할 수 있습니다. –

+0

예, 그렇습니다. 이것은 제가 제공 할 수있는 예제처럼 간단합니다. 매우 구체적인 성냥을 찾고 있다면 정규 표현식을 작성해야합니다. 내가 아는 한, 그것이 유일한 해결책 일 것입니다. – Scotch

관련 문제