结合命令行和T-SQL - SQL Server

Azn*_*l92 5 sql-server sqlcmd

我想通过T-SQL SQL Server 2008上执行一些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
Run Code Online (Sandbox Code Playgroud)

由于某种原因,当我执行我的存储过程时,上面的代码似乎被跳过,因为它不会回写任何错误消息.

编辑:重新调整间距和我的代码,@ myVariable,现在执行.但是,即使数据文件大小= 0,它仍然无法删除表.但是,当我在批处理文件中对其进行硬编码时,它的工作方式非常好.有任何想法吗?

Azn*_*l92 1

我意识到我可以使用此方法检查表计数而不是数据文件大小:

SET @sqlCheck = 'SQLCMD -E -S ServerA -Q "IF (SELECT COUNT(*) FROM '+@databaseName+'.'+@schemaName+'.'+@tableName+') > 0 BEGIN DELETE FROM ServerB.'+@databaseName+'.'+@schemaName+'.'+@tableName+' END;"'
                EXEC MASTER..xp_cmdshell @sqlcheck
Run Code Online (Sandbox Code Playgroud)