【问题标题】:A SQL Server 2005 Express query that will add a table per database一个 SQL Server 2005 Express 查询,它将为每个数据库添加一个表
【发布时间】:2014-07-25 17:51:01
【问题描述】:

这是我要运行的查询

DECLARE @str VARCHAR(10)
DECLARE @index int
DECLARE @SQL VARCHAR(100)
DECLARE @SQL2 VARCHAR(300)
DECLARE @SQL3 VARCHAR(400)

SET @str = 'DB'
SET @index = 0

WHILE @index < 100
BEGIN
    SET @SQL = 'use ' + @str + CASE 
                   WHEN @index < 10 THEN '00'
                   WHEN @index < 100 THEN '0'
                   ELSE ''
                   END + CAST(@index as VARCHAR)
    EXEC(@SQL)
    GO

    CREATE TABLE Persons
    (
        PersonID int,
        LastName varchar(255),
        FirstName varchar(255),
        Address varchar(255),
        City varchar(255)
    );

    set @index = @index + 1
END

我认为应该在名为 DB000DB099 的数据库中为每个数据库创建一个表,但我收到 3 个语法错误,它们发布在下面

消息 102,第 15 级,状态 1,第 18 行
')' 附近的语法不正确。

消息 137,第 15 级,状态 2,第 9 行
必须声明标量变量“@index”。

消息 137,第 15 级,状态 2,第 11 行
必须声明标量变量“@index”。

有人可以帮我正确完成这项工作吗?或者至少为我指明正确的方向?

【问题讨论】:

  • 我相信您还需要在 CAST 中添加 VARCHAR 的长度。见link
  • 很好的做法,但在这种情况下并不真正需要,只要您不打算超过默认长度 30。

标签: sql sql-server sql-server-2005 sql-server-2005-express


【解决方案1】:

如果您需要在名为 DB000 到 DB099 的数据库中创建这张表,这应该可以工作:

       DECLARE @str VARCHAR(10)
       DECLARE @index int
       DECLARE @SQL VARCHAR(100)
       DECLARE @SQL2 VARCHAR(300)
       DECLARE @SQL3 VARCHAR(400)


       SET @str = 'DB'
       SET @index = 0

       WHILE @index < 100
       BEGIN
       SET @SQL = @str + CASE 
               WHEN @index < 10 THEN '00'
               WHEN @index < 100 THEN '0'
               ELSE ''
       END + CAST(@index as VARCHAR)
       PRINT @SQL
       -- EXEC(@SQL)

       SET @SQL2 = 'CREATE TABLE ' + @SQL + '..Persons
         (
          PersonID int,
          LastName varchar(255),
          FirstName varchar(255),
          Address varchar(255),
          City varchar(255)
          );'
        EXEC(@SQL2)

       set @index = @index + 1
       END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2014-04-09
    • 2011-01-13
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多