erkaMedlem sedan dec. 19994 597 inlägg
Hej, i databasen jag har kan man ha två värden (olika grupper som ska visas), de är antingen 1 eller 2. Dessa värden skickar man med till sp:n för att få ut en grupp, nu försöker jag fixa så att om man skickar med 3 ska man få med båda grupperna.
Nu har jag följande kod
@visibility int,
@language int,
@group varchar(100)
AS
IF @group = 3
BEGIN
SET @group = '1 OR Model.FKgroupID = 2'
END
SELECT Model.PKmodelID, Model.ModelName, ModelDescription.FullModelName, ModelDescription.Description
FROM Model INNER JOIN
ModelDescription ON Model.PKmodelID = ModelDescription.PKmodelID INNER JOIN
ModelVisibilityLink ON Model.PKmodelID = ModelVisibilityLink.PKmodelID INNER JOIN
ProductGroup ON Model.FKproductGroupID = ProductGroup.PKproductGroupID
WHERE ModelDescription.PKlanguageID = @language AND ModelVisibilityLink.PKvisibilityID = @visibility AND Model.FKgroupID = @group
Om jag skickar med 3 får jag följande felmeddelande
Syntax error converting the varchar value '1 OR Model.FKgroupID = 2' to a column of data type int.
(det funkar med att skicka med 1 eller 2 dock, vilket det ska), så min fråga är hur fan jag konverterar det rätt så att säga.
Tacksam
@ndersMedlem sedan juni 200026 914 inlägg
Kan man inte göra så här?
@visibility int,
@language int,
@group varchar(100)
AS
IF @group = 3
BEGIN
SET @group = '1, 2'
END
SELECT Model.PKmodelID, Model.ModelName, ModelDescription.FullModelName, ModelDescription.Description
FROM Model INNER JOIN
ModelDescription ON Model.PKmodelID = ModelDescription.PKmodelID INNER JOIN
ModelVisibilityLink ON Model.PKmodelID = ModelVisibilityLink.PKmodelID INNER JOIN
ProductGroup ON Model.FKproductGroupID = ProductGroup.PKproductGroupID
WHERE ModelDescription.PKlanguageID = @language AND ModelVisibilityLink.PKvisibilityID = @visibility AND Model.FKgroupID IN (@group)
Det kanske inte fungerar dock. Annars får du lägga in alltihop i en sträng som du sedan exekverar med EXEC.
Mvh,
erkaMedlem sedan dec. 19994 597 inlägg
Nej får samma felmeddelande fast på 1, 2 då. Det var just det jag undrade hur man sätter ihop allt till en sträng som jag exekverar, alltså bygga upp strängen med lite till om det skulle vara en 3:a i @group
tack
@ndersMedlem sedan juni 200026 914 inlägg
Exempel:
declare @query varchar(8000)
...
SET @group = '1, 2'
SET @query = 'SELECT * FROM tabellen WHERE fältet IN (' + @group + ')'
EXEC @query
Mvh,
LarsGMedlem sedan dec. 200012 465 inlägg
declare @g1, @g2 int
if @group = 1 select @g1 = 1,@g2 = 1
if @group = 2 select @g1 = 2,@g2 = 2
if @group = 3 select @g1 = 1,@g2 = 2
SELECT Model.PKmodelID, Model.ModelName, ModelDescription.FullModelName, ModelDescription.Description
FROM Model INNER JOIN
ModelDescription ON Model.PKmodelID = ModelDescription.PKmodelID INNER JOIN
ModelVisibilityLink ON Model.PKmodelID = ModelVisibilityLink.PKmodelID INNER JOIN
ProductGroup ON Model.FKproductGroupID = ProductGroup.PKproductGroupID
WHERE ModelDescription.PKlanguageID = @language AND ModelVisibilityLink.PKvisibilityID = @visibility AND Model.FKgroupID IN (@g1,@g2)
så slipper du dynamisk sql
exec (@query)
erkaMedlem sedan dec. 19994 597 inlägg
Tack båda, men jag förstår inte riktigt hur jag ska skriva den i spn
koden nu blir
CREATE PROCEDURE [spModels]
@visibility int,
@language int,
@group int,
@g1 int,
@g2 int
AS
if @group = 1 select @g1 = 1,@g2 = 1
if @group = 2 select @g1 = 2,@g2 = 2
if @group = 3 select @g1 = 1,@g2 = 2
SELECT Model.PKmodelID, Model.ModelName, ModelDescription.FullModelName, ModelDescription.Description
FROM Model INNER JOIN
ModelDescription ON Model.PKmodelID = ModelDescription.PKmodelID INNER JOIN
ModelVisibilityLink ON Model.PKmodelID = ModelVisibilityLink.PKmodelID INNER JOIN
ProductGroup ON Model.FKproductGroupID = ProductGroup.PKproductGroupID
WHERE ModelDescription.PKlanguageID = @language AND ModelVisibilityLink.PKvisibilityID = @visibility AND Model.FKgroupID IN (@g1,@g2)
GO
LarsGMedlem sedan dec. 200012 465 inlägg
CREATE PROCEDURE spModels
@visibility int,
@language int,
@group int
AS
declare @g1 int,@g2 int
if @group = 1 select @g1 = 1,@g2 = 1
if @group = 2 select @g1 = 2,@g2 = 2
if @group = 3 select @g1 = 1,@g2 = 2
SELECT Model.PKmodelID, Model.ModelName, ModelDescription.FullModelName, ModelDescription.Description
FROM Model INNER JOIN
ModelDescription ON Model.PKmodelID = ModelDescription.PKmodelID INNER JOIN
ModelVisibilityLink ON Model.PKmodelID = ModelVisibilityLink.PKmodelID INNER JOIN
ProductGroup ON Model.FKproductGroupID = ProductGroup.PKproductGroupID
WHERE ModelDescription.PKlanguageID = @language AND ModelVisibilityLink.PKvisibilityID = @visibility AND Model.FKgroupID IN (@g1,@g2)
GO
erkaMedlem sedan dec. 19994 597 inlägg
LarsG, stort tack, nu ser jag ju hur man kan göra. Lärde mig mycket på det, danke danke. @nders, du ska ha tack oxå :)