我有一个datetime
列名[dbo].[Bus Station]
,我希望将其作为参数@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
我该怎么办? :(
答案 0 :(得分:1)
您希望执行的是执行动态SQL语句。这可以完成,但您必须小心,因为根据输入来自用于构建查询的输入,您可能容易受到SQL注入攻击。在微软关于这种方法的信息页面上,它说:
重要提示:在使用字符串调用EXECUTE之前,请进行验证 字符串。永远不要执行从用户构造的命令 未经验证的输入。
https://docs.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上的这个问题:
Getting result of dynamic SQL into a variable for sql-server