2015-03-31 72 views
-1

我想創建一個基於它們的前綴來組合特定表的視圖。
這是一個在SQL 2008服務器上運行的數據庫。基於前綴創建工會特定表的視圖

表被命名爲以下幾點:
Table_XXX_13_1 ; Table_XXX_14_2 ;Table_XXX_15_3 ; Table_XXX_15_4 ...

新視圖的名稱: 'View_XXX_15'

我應該如何進行? 我想過濾'Table_XXX_15%',試圖使用選擇的東西,
請列出一些信息,我是SQL新手。

鏈接類似的問題:I need to create a view that unions all tables based on their prefix (new tables added monthly)

編輯
下面的代碼無法正常工作:

CREATE PROCEDURE spCreateView2015 
      @BaseTableName varchar(100), 
      @View varchar(100), 
      @s varchar(max), 
      @v varchar(max) 

AS 
BEGIN 
     SET NOCOUNT ON; 
     set @BaseTableName = 'Table%15%'; 
     set @View = 'View_097_001_test'; 

     set @v = 
     N'(
      select stuff((
      select cast('' union all select * from '' as nvarchar(max)) + quotename(''CEE_097_001'') 
      from information_schema.tables 
      where table_name like @BaseTableName)) 
     )'; 

     set @s = 'DROP VIEW ' + @View; 
     EXEC (@s); 

     set @c = N'CREATE VIEW @View AS ' + @v; 
     EXEC Sp_executesql @c, N'@View varchar(100), @BaseTableName varchar(100)', @View, @BaseTableName; 

OUTPUT:
過程或函數 'spCreateView2015' 需要參數「@BaseTableName ', 那是不供給的。

+0

你已經找到了解決方案。什麼不行? – 2015-03-31 10:28:35

+0

請參閱上文,只是對其進行了編輯。 – 2015-03-31 10:36:11

+0

和什麼不工作? – 2015-03-31 10:44:33

回答

0

您在Database附近缺少引號,並且在設置動態變量@v時應添加引號。應該是這樣的:

CREATE PROCEDURE spCreateView2015 
@BaseTableName varchar(100) = 'Table_XXX_15%', 
@View varchar(100) = 'View_XXX_2015' 
AS 
BEGIN 
    SET NOCOUNT ON; 

      declare @v nvarchar(max) 
      set @v = 
      '(
       select stuff((
       select cast('' union all select * from '' as nvarchar(max)) + quotename(''Database'') 
       from information_schema.tables 
       where name like @BaseTableName)) 
      );' 

     declare @s nvarchar(max) = 'DROP VIEW ' + @View; 
     EXEC Sp_executesql @s, N'@BaseTableName varchar(100), @View varchar(100)', @BaseTableName, @View 

     declare @c nvarchar(max) = 'CREATE VIEW ' + @View + ' AS ' + @v; 
     EXEC Sp_executesql @c, N'@BaseTableName varchar(100), @View varchar(100)', @BaseTableName, @View   

END 
+0

運行腳本後,我得到一個錯誤。見輸出。 – 2015-03-31 12:03:43

+0

您需要執行以下動態變量:'EXEC Sp_executesql @s,N'@ BaseTableName varchar(100),@View varchar(100)',@BaseTableName,@ View' – 2015-03-31 12:30:20

+0

我實現了您提出的代碼。仍然輸出保持不變... – 2015-03-31 14:00:48