2015-05-26 75 views
0

我需要生成像'test_table_1','test_table_2'這樣的表......我做錯了什麼?如何在MS SQL中生成表格?

declare @i int = 1; 
 
declare @i_str varchar(1024); 
 
declare @table VARCHAR(1024); 
 

 

 
while (@i < 500) 
 
BEGIN 
 
SET @i = @i + 1; 
 
SET @table = 'TEST_TABLE_' + convert(varchar, @i); 
 

 
IF NOT EXISTS(SELECT * 
 
       FROM INFORMATION_SCHEMA.TABLES 
 
       WHERE TABLE_SCHEMA = 'dbo' 
 
       AND TABLE_NAME = @table) 
 

 
CREATE TABLE @table (
 
\t ID INT, 
 
\t userid INT, 
 
\t name TEXT, 
 
\t last_name TEXT, 
 
\t country TEXT, 
 
\t city TEXT 
 
) 
 

 
END

錯誤:近@table 語法不正確。期待'。',ID或QUOTED_ID

+0

首先不要用這種方式初始化declare @i int = 1;讓它聲明@i int,並設置@i = 1; – Reena

回答

0

這裏的問題是臨時表使用散列#table。您試圖將該名稱作爲變量傳遞。你可以嘗試才達到該

的一種方法是建立一個創建表的字符串

declare @createTable varchar(1000), 
    @table varchar(30) = 'table1' 
SET @createTable = 'CREATE TABLE #' + @table + ' (ID INT,userid INT, name TEXT,last_name TEXT,country TEXT,city TEXT)' 

EXEC (@createTable) 
+0

好吧,它可以工作,但我想要簡單的表格,而不是臨時的。謝謝。 –

+0

瞭解,只需刪除散列。應該工作一樣。 –

0

如果你想創建永久表(不是臨時表),則該選項之一是使用動態查詢。如下圖所示

DECLARE @TableName NVARCHAR(128) DECLARE @Column1Name NVARCHAR(32) 
DECLARE @Column1DataType NVARCHAR(32) DECLARE @Column1Nullable NVARCHAR(32) 

DECLARE @SQLString NVARCHAR(MAX) 

SET @SQLString = 'CREATE TABLE ' + @TableName + '('+ @Column1Name + ' 
' + @Column1DataType + ' '+ @Column1Nullable +') ' 
EXEC (@SQLString)