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.
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.