Ich habe folgende SQL-Abfrage.SQL Parameter Problem
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
Die obige Abfrage funktioniert gut, wenn @OID
hart codiert ist, aber wenn ich versuche, einen @OID
Wert zu übergeben, wie unten gezeigt er keinen Wert in der Tabelle zurückgibt. Schließlich muss ich die gespeicherte Prozedur erstellen und @OID
Wert übergeben.
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
Das ist Nicht-Standard-SQL. Welches [DBMS] (https://en.wikipedia.org/wiki/DBMS) Produkt verwenden Sie? "SQL" ist nur eine Abfragesprache, nicht der Name eines bestimmten Datenbankprodukts. –
Die Variable @OID, die Sie übergeben, ist ein Varchar und wird in der IN-Klausel als solche behandelt. Je nachdem, welche Version von SQL Sie verwenden, kann diese Stapelüberlaufantwort Ihnen helfen, https://stackoverflow.com/questions/29538697/create-t-sql-function-with-table-parameter, falls nicht, lassen Sie uns bitte wissen, welche SQL und Version Sie verwenden. – SteveB
Ich benutze MS SQL Server 2012 – Learner