2013-09-25 67 views
3

我想將236個int值存儲到sql中的一行中。現在我必須聲明表格,但是我不想輸入236倍的列名。列名應該是BYTE001,BYTE002,或其他前綴BYTE(B,INT,...)。 可以自動生成ColumnNames嗎?自動創建具有n個列的表格

我試試下面的代碼,但它不工作:

USE dbXXX 
DECLARE @Columname varchar(10) 
SET @Columname = 'BYTE011' 
ALTER table tbl_Archiv_BYTEsps 
ADD @Columname int; 

我要生成一個while循環的列名,但似乎不允許使用變量與ADD-命令。我alwasys得到錯誤:'@Columname'附近的錯誤語法 我該怎麼做才能生成表格?或者有另一種方法來存儲我的236整數值?

+0

此表代表什麼實體?所有的行都有236個非空值嗎?訂單重要嗎?即「BYTE001」與「BYTE236」是否可以互換?另外,如果值是字節將'BINARY(236)'成爲你所需要的? –

回答

0

您需要使用動態sql來執行此查詢。

DECLARE @query VARCHAR(MAX) 

SET @query='ALTER table tbl_Archiv_BYTEsps ADD '[email protected]+' int' 
EXEC (@query) 

但我認爲最好查看一下你的表結構,因爲它似乎有點混亂,爲一張表維護236列。

3

嘗試這一個 -

IF OBJECT_ID ('dbo.temp') IS NOT NULL 
    DROP TABLE dbo.temp 

DECLARE @SQL NVARCHAR(MAX) 
SELECT @SQL = 'CREATE TABLE dbo.temp (ID INT IDENTITY(1,1) PRIMARY KEY, ' + STUFF((
    SELECT ', BYTE' + RIGHT('000' + CAST(sv.number AS VARCHAR(3)), 3) + ' INT' 
    FROM [master].dbo.spt_values sv 
    WHERE sv.[type] = 'p' 
     AND sv.number BETWEEN 1 AND 236 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')' 

PRINT @SQL 
EXEC sys.sp_executesql @SQL 

輸出 -

CREATE TABLE dbo.temp (ID INT IDENTITY(1,1) PRIMARY KEY, BYTE001 INT, BYTE002 INT, BYTE003 INT, BYTE004 INT, BYTE005 INT, BYTE006 INT, BYTE007 INT, BYTE008 INT, BYTE009 INT, BYTE010 INT, BYTE011 INT, BYTE012 INT, BYTE013 INT, ... , BYTE235 INT, BYTE236 INT) 
2

現在,我寫了這個代碼:

USE sip_audi_01 
DECLARE @Columname varchar(10) 
DECLARE @integer int 
DECLARE @query VARCHAR(MAX) 
SET @integer = 0 
SET @Columname = 'BYTE' 
SET @query='ALTER table tbl_Archiv_BYTEsps ADD '[email protected]+' int' 
WHILE @integer = 235 
BEGIN 
    SET @integer = @integer + 1 
    SET @Columname = @Columname + CAST(@integer AS char) 
    EXEC (@query) 
    PRINT 'Nummer:' + CAST(@integer AS char) 
END; 

,但什麼也沒有發生....在那裏我可以讀在SQL Server Server Management Studio中打印輸出? @Devart,抱歉,但你的代碼對我來說太難了。

相關問題