我想通过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,它仍然无法删除表.但是,当我在批处理文件中对其进行硬编码时,它的工作方式非常好.有任何想法吗?
我想通过比较指定表中的日期列来删除任何超过 15 天的开发数据库。
有没有办法用 WHERE 子句编写 DROP 数据库查询,或者我必须执行动态 SQL?
下面是我的 SQL 查询:
DROP DATABASE IF EXISTS
WHERE (SELECT ID FROM master.TableName
WHERE Date < DATEADD(DAY, -15, GETDATE())
AND ColumnName1 = 1
AND ColumnName2 = 0)
Run Code Online (Sandbox Code Playgroud) 在SQL Server上使用sysjobs和sysjobhistory,我一直在谷歌搜索,但我似乎无法找到这个问题的直接答案.我认为这是因为我试图在WHERE子句中这样做.
因此,基本上尝试选择在其运行的同一天失败的作业(基本上是今天的日期),因为当前代码正在选择所有失败的现有作业.
以下是我的代码:
SELECT DISTINCT
sj.name,
COUNT(sjh.instance_id) AS errors
FROM
msdb..sysjobhistory sjh
JOIN
msdb.dbo.sysjobs sj ON sj.job_id = sjh.job_id
WHERE
name IN ('SQLAgentJob1', 'SQLAgentJob2')
AND sjh.run_status = 1
AND (SELECT CONVERT(DATE, CONVERT(INT, sjh.run_date), 112)) = (SELECT CONVERT(DATE, GETDATE(), 112))
GROUP BY
sj.name
Run Code Online (Sandbox Code Playgroud)
我一直收到错误声明:
消息529,级别16,状态2,行13
不允许从数据类型int到日期的显式转换.
有任何想法吗?
尝试创建一个触发器,删除任何90天的记录.我使用了stackoverflow中的一个触发器语句,我发现并稍微更改了语句,但在我的MySQL Workbench中,我收到了语法错误.我似乎无法弄清楚出了什么问题.
以下是我的查询:
create trigger user_connections_dump after insert on user_connections
for each row
begin
delete from connection_time where Date('2014-06-09') > Date('now','-90 days')
end;
Run Code Online (Sandbox Code Playgroud)