执行动态SQL语句

时间:2014-02-07 11:53:03

标签: sql sql-server-2008-r2

当我尝试在一个SQL Server 2008 R2中执行follow语句时

declare @tsql varchar(max), @linkedServer varchar(30), @comandoExec varchar(max)


SET @linkedServer = 'Linked_Server'
Set @tsql = 'USE Database_test
select
      left(a.NAME,30),
      left(a.FILENAME,200),
      convert(decimal(12,2),round(a.size/128.000,2)),
      convert(decimal(12,2),round(fileproperty(a.name,''SpaceUsed'')/128.000,2)),
      a.groupid
from
      [sys].sysfiles a'

SET @comandoExec =      'EXEC('''+ @tsql +''') AT '+@linkedServer

print @comandoExec
EXEC (@comandoExec)

我收到此错误消息。

Msg 102, Level 15, State 1, Line 6
Incorrect syntax near 'SpaceUsed'

在这种情况下有人可以帮助我吗?

最好的问候 埃德尼

3 个答案:

答案 0 :(得分:1)

declare @tsql varchar(max), @linkedServer varchar(30), @comandoExec varchar(max)


SET @linkedServer = 'Linked_Server'
Set @tsql = 'USE Database_test
select
      left(a.NAME,30),
      left(a.FILENAME,200),
      convert(decimal(12,2),round(a.size/128.000,2)),
      convert(decimal(12,2),round(fileproperty(a.name,"SpaceUsed")/128.000,2)),
      a.groupid
from
      [sys].sysfiles a'

SET @comandoExec =      'EXEC('''+ @tsql +''') AT '+@linkedServer

print @comandoExec
EXEC (@comandoExec)

答案 1 :(得分:1)

我发现了问题,这段代码现在运行正常。 我需要再添加2个''和SpaceUsed的声明

declare @tsql varchar(max), @linkedServer varchar(30), @comandoExec varchar(max)


SET @linkedServer = 'Linked_Server'
Set @tsql = 'USE Database_test
select
      left(a.NAME,30),
      left(a.FILENAME,200),
      convert(decimal(12,2),round(a.size/128.000,2)),
      convert(decimal(12,2),round(fileproperty(a.name,''**''**SpaceUsed**''**'')/128.000,2)),
      a.groupid
from
      [sys].sysfiles a'

SET @comandoExec =      'EXEC('''+ @tsql +''') AT '+@linkedServer

print @comandoExec
EXEC (@comandoExec)

答案 2 :(得分:0)

问题解决了。

declare @tsql varchar(max), @linkedServer varchar(30), @comandoExec varchar(max)


SET @linkedServer = 'Linked_Server'
Set @tsql = 'USE Database_test
select
      left(a.NAME,30),
      left(a.FILENAME,200),
      convert(decimal(12,2),round(a.size/128.000,2)),
      convert(decimal(12,2),round(fileproperty(a.name,''**''**SpaceUsed**''**'')/128.000,2)),
      a.groupid
from
      [sys].sysfiles a'

SET @comandoExec =      'EXEC('''+ @tsql +''') AT '+@linkedServer

print @comandoExec
EXEC (@comandoExec)