日期:2014-05-17  浏览次数:20493 次

写存储遇到一个简单的问题
create procedure sp_update  
as  
BEGIN  
  DECLARE @m_str varchar(12) 
  DECLARE @sql varchar(200) 
  DECLARE @sql1 varchar(200) 
  select @m_str=db_name()
  select @sql='master..xp_cmdshell '
  select @sql1='c:\sql\update '+@m_str
  exec('@sql+'''+@sql1+'''')
end

上面是我写的存储报错,我最后一句想实现的是 exec('master..xp_cmdshell 'c:\sql\update @m_str(变量)' ')
执行报\错或变量错误

------解决方案--------------------
我不知道楼主想要做什么,正常xp_cmdshell的示例:

A. 返回可执行文件列表

下例显示执行目录命令的 xp_cmdshell 扩展存储过程。

EXEC master..xp_cmdshell 'dir *.exe'
B. 使用 Windows NT net 命令

下例显示 xp_cmdshell 在存储过程中的使用。下例先用 net send 通知用户 SQL Server 即将关闭,然后用 net pause 暂停服务器,最后用 net stop 关闭服务器。

CREATE PROC shutdown10
AS
EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down 
in 10 minutes. No more connections allowed.', no_output
EXEC xp_cmdshell 'net pause sqlserver'
WAITFOR DELAY '00:05:00'
EXEC xp_cmdshell 'net send /domain: SQL_USERS ''SQL Server shutting down 
in 5 minutes.', no_output
WAITFOR DELAY '00:04:00'
EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down 
in 1 minute. Log off now.', no_output
WAITFOR DELAY '00:01:00'
EXEC xp_cmdshell 'net stop sqlserver', no_output
C. 不返回输出

下例使用 xp_cmdshell 执行命令字符串,且不向客户端返回输出。

USE master
EXEC xp_cmdshell 'copy c:\sqldumps\pubs.dmp \\server2\backups\sqldumps', 
NO_OUTPUT
D. 使用返回状态

在下例中,xp_cmdshell 扩展存储过程也给出了返回状态。返回代码值存储在变量 @result 中。

DECLARE @result int
EXEC @result = xp_cmdshell 'dir *.exe'
IF (@result = 0)
PRINT 'Success'
ELSE
PRINT 'Failure'
E. 将变量内容写入文件

下例将当前目录内容写入当前服务器目录下名为 dir_out.txt 的文件中。

DECLARE @cmd sysname, @var sysname
SET @var = 'dir /p'
SET @cmd = 'echo ' + @var + ' > dir_out.txt'
EXEC master..xp_cmdshell @cmd
------解决方案--------------------
SQL code

declare @m_str varchar(200)  
declare @sql varchar(200)   
select @m_str='地区'
select @sql='master..xp_cmdshell '
select @sql=@sql+'''c:\sql\update '+@m_str+''''
select @sql
/*
master..xp_cmdshell 'c:\sql\update 地区'
*/