【发布时间】:2016-01-13 18:35:39
【问题描述】:
我正在尝试通过 SQL Server 2008 上的 T-SQL 执行一些 sqlcmd。我在代码的一部分中检查数据文件大小,如果该数据文件大小不等于 0,则开始删除特定的表,这样我就可以在新数据中进行 BCP。
下面是我没有被执行的代码:
SET @myVariable = '
SETLOCAL
FOR %%R IN (X:\Main Folder\Data\'+@databaseName+'_'+@tableName+'.dat) DO SET size=%%~zR
IF %size% NEQ 0 (
SQLCMD -E -S my-server-name -Q "DELETE FROM '+@databaseName+'.'+@schemaName+'.'+@tableName+';" >> X:\Main Folder\Log\Log.txt
)'
EXEC master..xp_cmdshell @myVariable
由于某种原因,当我执行我的存储过程时,上面的代码似乎被跳过了,因为它没有返回任何错误消息。
编辑:重新调整间距后,我的代码@myVariable 现在开始执行。但是,即使数据文件大小 = 0,它仍然会删除表,但它仍然不起作用。但是,当我在批处理文件中对其进行硬编码时,它工作得非常好。有什么想法吗?
【问题讨论】:
-
为什么不向数据库中添加一个存储过程来执行检查、删除或截断。然后从命令行执行这个?
-
引用文件名?在
for和重定向的输出中。 -
根据您的配置和操作系统版本,在 IF 之后缺少 /i。试试 IF /i。
标签: sql-server sqlcmd