表名不能在语句中做参数!
如果要用作参数只能这样用,如:
set @tablename='mytable'
set @sql="select * from '+@tablename
exec(@sql)

解决方案 »

  1.   

    要把变量的定义写进语句里
    EXECUTE sp_executesql @SQlString,N'varchar @DataFile NVarchar(100),@DataFile NVarchar(100)',@DataFileName=@DataFile,@LogFileName=@LogFile
      

  2.   

    To OpenVMS:
    变量的定义写了呀!
    写进语句也没有用。
      

  3.   

    你要改成下面的样子
    USE master
    GO
    if exists (select * from sysdatabases where name='mydb1')
      DROP DATABASE mydb1
    GO
    --Get SQL Server Setup Path
    declare @path varchar(200)
    exec master.dbo.xp_regread 
        'HKEY_LOCAL_MACHINE',
        'SOFTWARE\Microsoft\MSSQLSERVER\setup',
        'SQLPath',@path output
    set @path = @path + '\data\'
    print @path
    declare @SQLString Nvarchar(500)
    declare @ParamDefinition Nvarchar(255)
    declare @DataFile NVarchar(100)
    declare @LogFile NVarchar(100)set  @SQLString = 
    N'CREATE DATABASE mydb1
    ON 
    ( NAME = mydb1_dat,

      FILENAME = '+@DataFileName+',  --看到了吗,这里错了
      SIZE = 100,
      MAXSIZE = 500,
      FILEGROWTH = 10 )
    LOG ON
    ( NAME = ''mydb1_log'',
      FILENAME = '+@LogFileName+', --看到了吗,还有这里错了
      SIZE = 5MB,
      MAXSIZE = 25MB,
      FILEGROWTH = 5MB )
      '
    set  @ParamDefinition=N'@DataFileName nvarchar(100), @LogFileName nvarchar(100)'
    set  @DataFile = @path+'\data\mydb1Dat.mdf'
    set  @LogFile =  @path+'\data\mydb1Log.mdf'EXECUTE sp_executesql @SQlString,@ParamDefinition,@DataFileName=@DataFile,@LogFileName=@LogFile
      

  4.   

    USE master
    GOif exists (select * from sysdatabases where name='mydb1')
      DROP DATABASE mydb1
    GO--Get SQL Server Setup Path
    declare @path varchar(200)
    exec master.dbo.xp_regread 
        'HKEY_LOCAL_MACHINE',
        'SOFTWARE\Microsoft\MSSQLSERVER\setup',
        'SQLPath',@path outputset @path = @path + '\data\'
    print @pathdeclare @SQLString Nvarchar(500)
    set  @SQLString = 
    N'CREATE DATABASE mydb1
    ON 

    ( NAME = ''mydb1_dat'',

      FILENAME='''
    +@path+'mydb1Dat.mdf'',
      SIZE = 100,

      MAXSIZE = 500,

      FILEGROWTH = 10 )

    LOG ON

    ( NAME = ''mydb1_log'',

      FILENAME ='''
     +@path+'mydb1Log.mdf'',

      SIZE = 5MB,

      MAXSIZE = 25MB,

      FILEGROWTH = 5MB )
      '
    print @SQLStringexec(@SQLString)
      

  5.   

    表名数据库名不能在语句中做参数的
    以下测试成功:USE masterGOif exists (select * from sysdatabases where name='mydb1')
      DROP DATABASE mydb1
    GO--Get SQL Server Setup Path
    declare @path varchar(200)
    exec master.dbo.xp_regread 
        'HKEY_LOCAL_MACHINE',
        'SOFTWARE\Microsoft\MSSQLSERVER\setup',
        'SQLPath',@path output
    set @path = @path + '\data\'
    print @pathdeclare @SQLString Nvarchar(1000)
    declare @ParamDefinition Nvarchar(255)
    declare @DataFile NVarchar(100)
    declare @LogFile NVarchar(100)
    set  @DataFile = @path+'mydb1Dat.mdf'
    set  @LogFile = @path+'mydb1Log.ldf'
    set  @SQLString = 
    N'CREATE DATABASE mydb1
    ON 

    ( NAME = mydb1_dat,

      FILENAME ='''+@DataFile+''',

      SIZE = 100,

      MAXSIZE = 500,

      FILEGROWTH = 10 )

    LOG ON

    ( NAME = ''mydb1_log'',

      FILENAME ='''+@LogFile+''',

      SIZE = 5MB,

      MAXSIZE = 25MB,

      FILEGROWTH = 5MB )
      'EXEC(@sqlstring)
      

  6.   

    表名数据库名不能在语句中做参数的
    以下测试成功:USE masterGOif exists (select * from sysdatabases where name='mydb1')
      DROP DATABASE mydb1
    GO--Get SQL Server Setup Path
    declare @path varchar(200)
    exec master.dbo.xp_regread 
        'HKEY_LOCAL_MACHINE',
        'SOFTWARE\Microsoft\MSSQLSERVER\setup',
        'SQLPath',@path output
    set @path = @path + '\data\'
    print @pathdeclare @SQLString Nvarchar(1000)
    declare @ParamDefinition Nvarchar(255)
    declare @DataFile NVarchar(100)
    declare @LogFile NVarchar(100)
    set  @DataFile = @path+'mydb1Dat.mdf'
    set  @LogFile = @path+'mydb1Log.ldf'
    set  @SQLString = 
    N'CREATE DATABASE mydb1
    ON 

    ( NAME = mydb1_dat,

      FILENAME ='''+@DataFile+''',

      SIZE = 100,

      MAXSIZE = 500,

      FILEGROWTH = 10 )

    LOG ON

    ( NAME = ''mydb1_log'',

      FILENAME ='''+@LogFile+''',

      SIZE = 5MB,

      MAXSIZE = 25MB,

      FILEGROWTH = 5MB )
      'EXEC(@sqlstring)