declare @name sysname
declare @SQL  nvarchar(600)
declare c1 cursor for 
        
select name from sysdatabases  where name like 'AIS%'
    open c1
    fetch c1 into @name    while @@fetch_status >= 0
    begin
        select @SQL = 'select '+@name+', FAccountID, FName from '+ @name+'.dbo.t_account'
 
        execute (@SQL)
        fetch c1 into @name
    end
    deallocate c1
报错
务器: 消息 207,级别 16,状态 3,行 1
列名 'AIS20050121105158' 无效。
服务器: 消息 207,级别 16,状态 3,行 1
列名 'AIS20051014110842' 无效。
服务器: 消息 207,级别 16,状态 3,行 1
列名 'AIS20060224165630' 无效。
服务器: 消息 207,级别 16,状态 3,行 1
列名 'AIS20060712101417' 无效。
服务器: 消息 207,级别 16,状态 3,行 1
列名 'AIS20070105090554' 无效。
服务器: 消息 207,级别 16,状态 3,行 1
列名 'AIS20080508142515' 无效。
服务器: 消息 207,级别 16,状态 3,行 1
列名 'AIS20090107135859' 无效。
我想把变量@name的值作为一列来显示

解决方案 »

  1.   


    select @SQL = 'select '+@name+' as newcol, FAccountID, FName from '+ @name+'.dbo.t_account'
      

  2.   

    上边写错!
    select @SQL = 'select '''+@name+''' as newcol, FAccountID, FName from '+ @name+'.dbo.t_account'
      

  3.   

    select @SQL = 'select '+@name+', FAccountID, FName from '+ @name+'.dbo.t_account'上面红色部分的@name不能直接做为列名显示吧?
      

  4.   

    select @SQL = 'select '''+@name+''' as newcol, FAccountID, FName from '+ @name+'.dbo.t_account'
      

  5.   

    14在数据库中拼字符串,也可以用参数  在实际的开发中,某些情况下在数据库中拼字符串不可避免,但又担心有特殊字符,导致拼出来的SQL有问题,其实数据库中拼字符串也可以使用参数,这就要用到dbo.sp_executesql ,这样就可以避免SQL注入和特殊字符导致的错误如DECLARE @IntVariable INT;--定义变量
    DECLARE @SQLString NVARCHAR(500);--存储拼出来的SQL
    DECLARE @ParmDefinition NVARCHAR(500);---存储拼出来的SQL中的参数
    /* Build the SQL string one time. */
    SET @SQLString =
         N'SELECT * FROM AdventureWorks.Sales.Store WHERE SalesPersonID = @SalesID';
    /* Specify the parameter format one time. */
    SET @ParmDefinition = N'@SalesID int';--赋值/* Execute the string with the first parameter value. */
    SET @IntVariable = 275;--赋值
    EXECUTE dbo.sp_executesql  @SQLString, @ParmDefinition,
                          @SalesID = @IntVariable;
    /* Execute the same string with the second parameter value. */
    SET @IntVariable = 276;
    EXECUTE dbo.sp_executesql  @SQLString, @ParmDefinition,
                          @SalesID = @IntVariable;
      

  6.   

    在表 AIS20050121105158.dbo.t_account  
    有列名 AIS20050121105158?
      

  7.   

    select @SQL = 'select '+@name+', FAccountID, FName from '+ @name+'.dbo.t_account'
    select @SQL = 'select ['+@name+'], FAccountID, FName from ['+ @name+'].dbo.t_account'