Динамический свод (в SQL Server 2005) - PullRequest
1 голос
/ 01 декабря 2009

Я пишу хранимую процедуру для Microsoft SQL 2005 и хочу создать динамический свод SQL:

SELECT Book.ISBN,
       Book.Name
       StockMutation.StockLocation
FROM   Book INNER JOIN StockMutation AS sm ON Book.bookid = sm.bookid
PIVOT
(
       COUNT(sm.NumberOfBooks)
       FOR sm.StockLocation IN (...)
)

Желательно заменить (...) на:

SELECT StockLocation.StockLocation FROM StockLocation

и не жестко кодировать все местоположения в процедуре ([Location1], [Location2] и т. Д.), Но SQL не принимает это.

Как мне решить эту проблему?

1 Ответ

1 голос
/ 01 декабря 2009

Вы не можете сделать это в чистом SQL, вам нужно использовать динамический SQL и построить фактический SQL, который вы хотите выполнить.

Вы можете сделать это так:

DECLARE @sql VARCHAR(8000)
SET @sql = 'FOR sm.StockLocation IN ('

DECLARE cursor...

LOOP cursor...

SET @sql = @sql + '''' + column_name + ''','

// end loop

EXEC(@sql)
...