CREATE PROCEDURE usp_test AS DECLARE @sql NVARCHAR(1000) DECLARE @retval INTEGER SET @sql='IF EXISTS (SELECT * FROM t1) BEGIN RAISERROR(''not so'',16,1) END' PRINT 'a' EXEC sp_executesql @sql IF @@ERROR = 0 BEGIN PRINT 'b' END GO
Hmm jeg er ikke helt glad for at den kaster en fejl. Min helt konkrete problemstilling er at jeg skal teste for om en tabel eksisterer på en linked server. På nogle miljøer eksisterer den linkede server ikke (hvilket er helt ok).
Jeg er interesseret i at min procedure skal skrive nogle data til den linkede server HVIS den eksisterer - ellers skal proceduren bare returnere uden af ham som kalder får besked om det er gået godt eller skidt.
Problemer er at hvis jeg skriver IF NOT EXISTS(select 1 from LOADTEST.master.dbo.sysobjects where id = object_id(N''[dbo].[load_test_TEMP]'') and OBJECTPROPERTY(id, N''IsUserTable'')=1) så kommer fortolkeren med en fejl der gør at jeg slet ikke må oprette en procedure med ovenstående linje - hvis den linkede server ikke er sat ok.
Derfor ville jeg benytte dynamisk sql, men det giver tilsyneladende også problemer. Nogle idéer?
Hvis du kan et 'test-statement' hvor HELT stien (inkl. linked server) står som en streng så kan man. Ellers vil den hele tiden lave compile-time check på om den linkede server er eksisterer. Dette gælder også for executesql
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.