sqlserver 2000查询数据,实现根据时间查询表名字,如果表名字不存在则返回“表不存在”,如果查询无结果,则返回“查询无结果集”
DECLARE @tableName NVARCHAR(128)
DECLARE @sql NVARCHAR(4000)
DECLARE @currentDate NVARCHAR(8)
DECLARE @rowCount INT
DECLARE @msg NVARCHAR(255)
-- 获取当前日期的格式 'YYYYMMDD'
SET @currentDate = CONVERT(NVARCHAR(8), GETDATE(), 112)
-- 构建表名
SET @tableName = 'alerm' + @currentDate
-- 初始化消息变量
SET @msg = '查询结果为空'
-- 尝试构建并执行查询
BEGIN TRY
-- 检查表是否存在
IF OBJECT_ID('dbo.' + @tableName) IS NOT NULL
BEGIN
-- 假设你要查询的列是 Column1, Column2 并且条件是 Column3 = SomeValue
-- 并且你想获取最近10分钟的数据(假设你有一个时间戳列 TimestampColumn)
SET @sql = N'SELECT @rowCount = COUNT(*) FROM ' + @tableName +
' WHERE atime >= DATEADD(MINUTE, -10, GETDATE()) '
-- 使用 sp_executesql 执行查询并获取行数
EXEC sp_executesql @sql, N'@rowCount INT OUTPUT', @rowCount OUTPUT
-- 检查行数是否大于0
IF @rowCount > 0
BEGIN
-- 如果有结果,则再次执行查询以获取实际数据
SET @sql = N'SELECT aid, aname FROM ' + @tableName +
' WHERE atime >= DATEADD(MINUTE, -10, GETDATE()) '
EXEC(@sql)
-- 如果到了这里,说明有数据并且已经输出了,不需要设置消息变量
SET @msg = NULL
END
ELSE
BEGIN
-- 如果没有结果,则设置消息变量
SET @msg = '查询结果为空'
END
END
ELSE
BEGIN
-- 如果表不存在,则设置消息变量
SET @msg = '表不存在'
END
END TRY
BEGIN CATCH
-- 如果有其他错误(如权限问题),则捕获异常并设置消息变量
SET @msg = ERROR_MESSAGE()
END CATCH
-- 输出消息(如果设置了的话)
IF @msg IS NOT NULL
PRINT @msg
····