2010-02-02 46 views
1

我想寫一個存儲過程,將基於給定的日期參數創建一個新的FILEGROUP。我想看到的是名爲「2010_02_01」的FILEGROUP。我得到的是名爲'@PartitionName'的FILEGROUP。以編程方式在SQL服務器中命名FILEGROUP?

ALTER PROCEDURE [dbo].[SP_CREATE_DATE_FILEGROUP] @PartitionDate DATETIME 
AS 
DECLARE 
    @PartitionName VARCHAR(10); 
BEGIN 
    SET @PartitionName = REPLACE(LEFT(CONVERT(VARCHAR, @PartitionDate, 120), 10), '-', '_'); 
    ALTER DATABASE MSPLocation ADD FILEGROUP [@PartitionName]; 
END 
+0

分區時,還有其他方法可以隨時創建文件組,如果組織正確,可以重新使用現有的文件組。 – Andrew 2010-02-02 10:23:47

回答

2

你將最終不得不使用sp_executesql執行它,像

declare @sql nvarchar(4000) 
setl @sql = 'ALTER DATABASE MSPLocation ADD FILEGROUP[' + @PartitionName + ']' 
exec sp_executesql @sql 
+0

我們已經採納了您的建議,並決定採用其他方式來即時創建它們,但也要感謝這個答案。 – 2010-02-02 11:00:13

+0

請閱讀http://sqlfascination.com/2009/10/15/guidance-on-how-to-layout-a-partitioned-table-across-filegroups/瞭解一些指導意見。 – Andrew 2010-02-02 11:06:12

0

使用動態SQL:

DECLARE @FileGroupName sysname 
SET @FileGroupName = 'Foo' 

EXEC ('ALTER DATABASE MyDatabase ADD FILEGROUP [' + @FileGroupName + ']') 

想想SQL注入,雖然。

+0

該參數是在聲明日期時間,所以注射不會發生。 – Andrew 2010-02-02 10:22:18

相關問題