2015-01-15 14 views
5

Tôi đang sử dụng Microsoft SQL Server và có vẻ như tôi không thể giải quyết vấn đề này.Máy chủ SQL: thả cột @variable không hoạt động

Tôi có một bảng mà trên đó tôi sẽ có một số cột động và tĩnh.

Cột tĩnh sẽ là tên sản phẩm, loại sản phẩm và dữ liệu động sẽ là một số dữ liệu sản xuất từ ​​các tháng liên tục.

Tại mỗi đầu tháng tôi phải thả từ các cột năng động trong tháng qua và thêm một tháng mới đến cuối của bảng

Giải pháp của tôi đã lưu tên của cột vào một biến địa phương và sau đó thêm nó vào câu lệnh thay đổi. Nhưng điều này không làm việc, nó giữ cho tôi một lỗi như dưới:

Msg 102, Level 15, State 1, Line 18
cú pháp sai gần '@month_b'

Bây giờ tôi sẽ thêm các truy vấn

declare @month_t char(15) 
declare @month_b char(15) 
declare @sql char(30) 

set @month_b = (SELECT top 1 name 
       FROM sys.columns 
       WHERE object_id = OBJECT_ID('dbo.ct_test') 
        AND name != 'TTNR' AND name != 'Family' AND name like '%B%' 
       ORDER BY name ASC) 

set @month_t = (SELECT top 1 name 
       FROM sys.columns 
       WHERE object_id = OBJECT_ID('dbo.ct_test') 
        AND name != 'TTNR' AND name != 'Family' AND name like '%T%' 
       ORDER BY name ASC) 

alter table ct_test 
    drop column @month_b 

Tôi không thể tìm ra giải pháp cho điều này, bạn có thể giúp tôi không.

Cảm ơn bạn trước

+0

này dường như không giống như một thiết kế tốt, btw. Thường xuyên thêm và thả các cột là một mùi mã cho tôi. –

Trả lời

4

Bạn cần phải sử dụng Dynamic Query

Declare @sql nvarchar(max) 

set @sql = 'alter table ct_test drop column '+ @month_b 

Exec sp_executesql @sql 

set @sql = 'alter table ct_test drop column '+ @month_t 

Exec sp_executesql @sql 
+0

Nó mang lại cho tôi một lỗi khác: Msg 214, Cấp 16, Tiểu bang 2, Thủ tục sp_execute, Dòng 1 Thủ tục mong đợi tham số '@handle' thuộc loại 'int'. –

+0

@CaluserIstvan - xin lỗi nó phải là 'sp_executesql' thay vì' sp_execute'. Cập nhật kiểm tra ngay bây giờ –

+0

Cảm ơn bạn rất nhiều, công trình này !! –

Các vấn đề liên quan