Avatar billede mickni33 Nybegynder
10. januar 2011 - 11:20 Der er 4 kommentarer

exec på en sql function

jeg har en funktion som returnere en sqlstreng.

Troede man kunne sige:
EXEC (SELECT dbo.fn_GetListOfProductMain_ParamID(70))
men det vil analyserne ikke finde sig i .

SELECT dbo.fn_GetListOfProductMain_ParamID(70) virker fint og returnere en streng f.eks 'Select * from kunde'
Den streng vil jeg så gerne eksekvere, kan man det ?
Avatar billede hrc Mester
10. januar 2011 - 11:28 #1
Ja, det skal stoppes ind i en Stored Procedure

Mener det skal være sådan her:

declare @sql varchar(200)
select @sql = dbo.fn_GetListOfProductMain_ParamID(@param) -- 70
exec @sql
Avatar billede mickni33 Nybegynder
10. januar 2011 - 11:36 #2
aaahh ok
Avatar billede hrc Mester
10. januar 2011 - 12:06 #3
Lige en lille rettelse (for det virker ikke):

declare @sql varchar(200)
select @sql = dbo.fn_GetListOfProductMain_ParamID(@param)
exec sp_executesql @sql


http://www.sommarskog.se/dynamic_sql.html

CREATE PROCEDURE general_select1 @tblname sysname,
                                @key    varchar(10) AS
DECLARE @sql nvarchar(4000)
SELECT @sql = ' SELECT col1, col2, col3 ' +
              ' FROM dbo.' + quotename(@tblname) +
              ' WHERE keycol = @key'
EXEC sp_executesql @sql, N'@key varchar(10)', @key


Bemærk den smarte måde parameteren angives. Man skal altid prøve at lave sine scripts parametiserede. Altså undgå scripts med "where ID = 223" men i stedet skrive "where ID = @ID" og angive værdien som parameter. Det har indvirkning på SQL-serverens execution-plan som bliver genereret på ny hver gang man har hårdkodet værdien mens den parametiserede genbruges.
Avatar billede hrc Mester
10. januar 2011 - 12:17 #4
En sidste rettelse:

declare @sql nvarchar(200)
select @sql = dbo.fn_GetListOfProductMain_ParamID(@param)
exec sp_executesql @sql

Det skal åbenbart kun være unicode (ntext/nchar/nvarchar). Måske kunne man typecaste varchars til nvarchar men det fik jeg ikke lige til at virke.
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