24. november 2004 - 11:38Der er
3 kommentarer og 1 løsning
Parameterliste i stored procedure
Jeg skal lave en stored procedure, som tager en parameterliste af værdier ind i, så jeg f.eks. kan lave en SELECT ... WHERE intUserID IN (<parameters>).
Jeg kan ikke sende en kommasepareret varchar med og så lave en SQL-streng inde i min stored procedure, idet jeg skal have resultatet over i en cursor, og man kan ikke få en cursor til at snakke sammen med en exec sp_executesql.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
DECLARE @strSQL nvarchar(2000) SET @strSQL = 'SELECT * FROM tblUser WHERE uidCustomerID = ''' + CONVERT(varchar(36), @uidCustomerID) + ''' AND '
DECLARE @strCriteria varchar(250)
DECLARE criterias_cursor cursor GLOBAL FOR EXEC 'SELECT strSQL FROM tblDynamicMailGroup WHERE intDynamicMailGroupID IN (' + @strDynamicMailGroupIDs + ')'
OPEN criterias_cursor
FETCH NEXT FROM criterias_cursor INTO @strCriteria WHILE (@@FETCH_STATUS = 0) BEGIN SET @strSQL = @strSQL + '(' + @strCriteria + ')'
FETCH NEXT FROM criterias_cursor INTO @strCriteria
IF (@@FETCH_STATUS = 0) BEGIN SET @strSQL = @strSQL + ' OR ' END END
CLOSE criterias_cursor DEALLOCATE criterias_cursor
DECLARE @strSQL nvarchar(2000) SET @strSQL = 'SELECT * FROM tblUser WHERE uidCustomerID = ''' + CONVERT(varchar(36), @uidCustomerID) + ''' AND '
DECLARE @strTemp nvarchar(250) SET @strTemp = 'SELECT strSQL FROM tblDynamicMailGroup WHERE intDynamicMailGroupID IN (' + @strDynamicMailGroupIDs + ')'
DECLARE @strCriteria varchar(250)
DECLARE criterias_cursor cursor GLOBAL FOR EXEC sp_executesql @strTemp
OPEN criterias_cursor
FETCH NEXT FROM criterias_cursor INTO @strCriteria WHILE (@@FETCH_STATUS = 0) BEGIN SET @strSQL = @strSQL + '(' + @strCriteria + ')'
FETCH NEXT FROM criterias_cursor INTO @strCriteria
IF (@@FETCH_STATUS = 0) BEGIN SET @strSQL = @strSQL + ' OR ' END END
CLOSE criterias_cursor DEALLOCATE criterias_cursor
SELECT @strSQL GO
Jeg skriver SELECT @strSQL til sidst for at få den genererede SQL-streng tilbage for at teste den...
EXEC 'DECLARE criterias_cursor cursor GLOBAL FOR SELECT strSQL FROM tblDynamicMailGroup WHERE intDynamicMailGroupID IN (' + @strDynamicMailGroupIDs + ')'
Nu har du en global cursor åbnet fra dynamisk sql. Du kan så kalde den videre fra dit script.
Synes godt om
Ny brugerNybegynder
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.