Reputation:
Simple question - have below query:
SELECT
CASE
WHEN r.number Is NULL THEN 1001
WHEN r.number = 9999 THEN 10001
ELSE r.number + 1
END number
FROM
(VALUES(123)) AS a(art)
LEFT JOIN
(SELECT
PARSENAME(Nummer, 3) art,
MAX(CAST(PARSENAME(Nummer, 2) AS INT)) number
FROM
tbArtikel
WHERE
Nummer LIKE '123[.]%'
GROUP BY
PARSENAME(Nummer, 3)) r ON r.art = a.art
I want to pass value from parameter to it in two places - where you see 123. I tried do like this but seems something is wrong, can you tell me how this should be done?
That's how I did it (wrong):
Using cmd As New SqlCommand("SELECT CASE WHEN r.number Is NULL THEN 1001
WHEN r.number = 9999 THEN 10001
Else r.number + 1 End number
FROM (VALUES(@producentNumber)) AS a(art) -- this will search this number within inner query And make case..
LEFT JOIN(
-- Get producent (in Like) number And max number Of it (without Like it Get all producent numbers And their max number out Of all
SELECT PARSENAME(Nummer, 3) art,
MAX(CAST(PARSENAME(Nummer, 2) AS INT)) number
FROM tbArtikel WHERE Nummer Like '@producentNumber[.]%'
GROUP BY PARSENAME(Nummer, 3)
) r
On r.art = a.art", con)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("@producentNumber", SqlDbType.Int)
Upvotes: 0
Views: 1143
Reputation: 6693
You have missing quots here
Like ' + @producentNumber + '[.]%'
Try this:
Using cmd As New SqlCommand("SELECT CASE WHEN r.number Is NULL THEN 1001
WHEN r.number = 9999 THEN 10001
Else r.number + 1 End number
FROM (VALUES(@producentNumber)) AS a(art) -- this will search this number within inner query And make case..
LEFT JOIN(
-- Get producent (in Like) number And max number Of it (without Like it Get all producent numbers And their max number out Of all
SELECT PARSENAME(Nummer, 3) art,
MAX(CAST(PARSENAME(Nummer, 2) AS INT)) number
FROM tbArtikel WHERE Nummer Like ' + @producentNumber + '[.]%'
GROUP BY PARSENAME(Nummer, 3)
) r
On r.art = a.art", con)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("@producentNumber", SqlDbType.Int)
Upvotes: 1