我需要生成像'test_table_1','test_table_2'这样的表...我做错了什么?
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 (
ID INT,
userid INT,
name TEXT,
last_name TEXT,
country TEXT,
city TEXT
)
END
错误: @table附近的语法不正确。期待'。',ID或QUOTED_ID
答案 0 :(得分: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)
答案 1 :(得分: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)