T-Sql - 将日期时间列名称参数从 VARCHAR 转换为时间



我有一个datetime列名[dbo].[Bus Station]我想在 T-SQL 脚本中将其作为参数传递@StationName

DECLARE @CurrentTime TIME(0) = '20:53:00',
@StationName TIME(0), -- Datetime Column Name
@BusTime TIME(0);
SET @StationName = '[dbo].[Bus Station]'
SET @BusTime = (SELECT TOP 1 @StationName 
FROM dbo.R1_pvt 
WHERE @StationName >= CONVERT (time(0), @CurrentTime))
SELECT DateDiff(mi, @CurrentTime, @BusTime) % 60    As Minutes

我该怎么做?:(

看来您要做的是执行动态 SQL 语句。 这是可以完成的,但您必须小心,因为根据用于构建查询的输入来自何处,您可能容易受到 SQL 注入攻击。在Microsoft关于此方法的信息页面上,它说:

重要说明:在使用字符串调用 EXECUTE 之前,请验证 字符串。从不执行从用户构造的命令 尚未验证的输入。

https://learn.microsoft.com/en-us/sql/t-sql/language-elements/execute-transact-sql

若要执行动态 SQL 语句,请在字符串(通常为 varchar(变量中生成查询,然后执行它。 这是通过使用EXECUTE()命令或调用sp_executesql系统存储过程来完成的。

-- variable to store the query
DECLARE @query varchar(500)
-- build the query
SET @query = 'SELECT TOP 1 ' + @StationName + ' FROM dbo.R1_pvt WHERE ' + @StationName + ' >= CONVERT(time(0), ''' + CAST(@CurrentTime as varchar) + ''' )'
-- execute the query
EXECUTE(@query);

在您的情况下,您还希望返回一个值。 这是可以做到的,并且已经在本网站的其他地方得到了很好的介绍。我建议你看看Stack Overflow上的这个问题:

将动态 SQL 的结果获取到 sql 服务器的变量中

相关内容

最新更新