Avatar billede 1ersen Nybegynder
03. juli 2007 - 12:52 Der er 2 kommentarer og
1 løsning

Stored Proc hvordan Declares database variabel?

Hej folkens!

Jeg roder pt med en stored proc hvor jeg har brug for at loope gennem en stribe databaser (på samme sqlsrv) og checke om en tabel eksisterer.

Jeg har kogt min problemstilling ned til følgende:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[testExists](@tblname nvarchar(30))
AS
BEGIN

IF EXISTS(SELECT * FROM sys.objects WHERE name = @tblname AND type in (N'U'))
    Return 1
ELSE
    return 0   

END


Mit problem består i at kunne lave opslaget på variabel database.
Lidt hen ad :

IF EXISTS(SELECT * FROM @db.sys.objects WHERE name = @tblname AND type in (N'U'))

men det går bare ikke, sikkert fordi jeg declarer @db som nvarchar, af mangel på andet.

Ideer til løsning modtages med iver! :)

En lækker udvidelse af løsningen kunne være at udføre opslaget hvis databasen ligger på anden SQLserver.

200 points fordi jeg allerede har brugt 3 timer på det. :)
Avatar billede arne_v Ekspert
03. juli 2007 - 13:46 #1
Du kan ikke bruge en variabel paa den maade.

Maaske string concatanation og EXEC ?
Avatar billede 1ersen Nybegynder
03. juli 2007 - 14:31 #2
Ja det var også min tanke, men umiddelbart kunne jeg ikke få nedenstående simple eksempel til at køre:
...
IF EXISTS(EXEC('SELECT * FROM ' + @db + '.sys.objects'))
  Return 1
ELSE
    return 0   
...
Avatar billede 1ersen Nybegynder
04. juli 2007 - 01:27 #3
Fandt så en løsning;

Ved at lagre resultatet i en tmp tabel kan EXISTS køre på subquery.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[test2]
AS
BEGIN

DECLARE @db nvarchar(30)
DECLARE @tblname nvarchar(30)

SET @db = 'DK_DPS'
SET @tblname = 'Table1'

CREATE TABLE #Tmp
(
Name nvarchar(30)
)

EXEC('INSERT INTO #Tmp (Name) SELECT Name FROM ' + @db + '.sys.objects WHERE name = ''' + @tblname + ''' AND type in (N''U'')')

IF EXISTS(Select * from #Tmp)
Return 1
ELSE
Return 0 

drop table #Tmp

END



Spørgsmålet er hermed lukket.
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