다음 SQL 쿼리가 있습니다.SQL 매개 변수 문제
DECLARE @OID NVARCHAR(MAX) = '(98,99,100,101,102,103,104,105)'
SELECT
Name = (SELECT [Name]
FROM Point
WHERE CAST(OID AS NVARCHAR(10)) = Point),
Timestamp,
ValueNumeric
FROM
[IngeniousRPM_Bridge].[dbo].[Value]
WHERE
CAST(Point AS NVARCHAR(10)) IN (98,99,100,101,102,103,104,105)
AND [Timestamp] BETWEEN '2017-11-01' AND '2017-11-30'
AND ValueNumeric IS NOT NULL
위의 쿼리는 @OID
가 하드 코딩 할 때 잘 작동하지만 난 @OID
값을 전달하려고 할 때이 테이블의 모든 값을 반환하지 않습니다 아래와 같이. 결국 저장 프로 시저를 만들고 @OID
값을 전달해야합니다. 당신은 VARCHAR 문자열에서 괄호를 제거하면
DECLARE @OID NVARCHAR(MAX) = '(98,99,100,101,102,103,104,105)'
SELECT
Name = (SELECT [Name]
FROM Point
WHERE CAST(OID AS NVARCHAR(10)) = Point),
Timestamp,
ValueNumeric
FROM
[IngeniousRPM_Bridge].[dbo].[Value]
WHERE
CAST(Point AS NVARCHAR(10)) IN (@OID)
AND [Timestamp] BETWEEN '2017-11-01' AND '2017-11-30'
AND ValueNumeric IS NOT NULL
이는 비표준 SQL입니다. 어떤 [DBMS] (https://en.wikipedia.org/wiki/DBMS) 제품을 사용하고 있습니까? "SQL"은 쿼리 언어 일뿐 특정 데이터베이스 제품의 이름은 아닙니다. –
전달중인 @OID 변수는 varchar이며 IN 절에서 이와 같이 처리됩니다. 사용중인 SQL 버전에 따라이 스택 오버플로 응답이 도움이 될 수 있습니다. https://stackoverflow.com/questions/29538697/create-t-sql-function-with-table-parameter 그렇지 않은 경우 알려주십시오. 어떤 SQL과 버전을 사용하고 있는지 알고 있어야합니다. – SteveB
MS SQL Server 2012를 사용 중입니다. – Learner