Avatar billede ml Nybegynder
04. december 2007 - 12:05 Der er 5 kommentarer

Brug veriabel direkte i SELECT

Jeg skal til en Stored Procedure bruge de samme WHERE statements i flere SELECT kald, hvorfor jeg gerne vil definere disse 'en gang og bruge dem i alle kald.

Hvordan gør jeg det?

Når jeg bruger DECLARE og sætter @Variabel ind i SELECT får jeg en "An expression of non-boolean type specified in a context where a condition is expected, near ')'." fejl.

Fx:

DECLARE @SQLWhere nvarchar(500)
SET @SQLWhere = '[User].Active = 1'

...

SELECT @UserCount=(SELECT COUNT(*) FROM [User] WHERE @SQLWhere)
Avatar billede lorentsnv Nybegynder
04. december 2007 - 12:29 #1
Exec 'SELECT @UserCount=(SELECT COUNT(*) FROM [User] WHERE ' + @SQLWhere
Avatar billede lorentsnv Nybegynder
04. december 2007 - 12:32 #2
Du kan ikke direkte eksekverer sql, hvor en del af SQL'en er en variable, men med Exec (execute), kan du bygge op en tekststreng, som eksekveres som en SQL.
Du kunne ogås have den første del som en variable:

DECLARE @SQL nvarchar(max)
DECLARE @SQLWhere nvarchar(500)
SET @SQL = 'SELECT @UserCount=(SELECT COUNT(*) FROM [User] WHERE '
SET @SQLWhere = '[User].Active = 1'

...

EXEC @SQL + @SQLWhere
Avatar billede ml Nybegynder
04. december 2007 - 13:21 #3
Det virker ikke, jeg får fejlen "Msg 102, Level 15, State 1, Procedure User_Search, Line 40 Incorrect syntax near '+'." på linjen med "EXEC @SQLUserCount + @SQLWhere":

DECLARE @SQLWhere nvarchar(500)
SET @SQLWhere = '[User].Active = 1)'

DECLARE @SQLUserCount varchar(max)
SET @SQLUserCount = 'SELECT @UserCount=(SELECT COUNT(*) FROM [User] WHERE '

BEGIN
    EXEC @SQLUserCount + @SQLWhere
END
Avatar billede hrc Mester
04. december 2007 - 16:09 #4
Hvorfor laver du din SQLWhere som NVarChar? Skal den ikke (hvis ellers man kan lave et boolske udtryk (Active = '1') sådan) være en "bit".

Hvad med at konvertere Active til en bit, eller er der for meget der skal ændres?
Avatar billede lorentsnv Nybegynder
04. december 2007 - 21:06 #5
Beklager, jeg glemte at sette parantes rundt det som skal executes:

EXEC (@SQLUserCount + @SQLWhere)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester