【发布时间】:2016-01-20 10:02:01
【问题描述】:
我在 SQL Server 中遇到了问题。我必须使用存储过程sp_executesql 这是一个系统过程,因为我在其上执行选择子句的表取决于其他参数。
这里是示例:
@p_Origin 是我的程序中给出的一个参数,所以要重现问题,让我们这样声明:
DECLARE @p_Origin nvarchar(255) = 'Sales'
我的SELECT 子句中还有一个参数,即目标表的列:
DECLARE @v_valueVersion as int
IF @p_Origin = 'Sales'
SET @v_valueVersion = (SELECT VersionId FROM Version WHERE ...)
ELSE IF
...
但是现在,我想从我的原始表中取回一列,(这里是Sales)
使用此查询:
DECLARE @v_query as nvarchar(max) = 'SELECT MAX(Date) FROM dbo.' + @p_Origin + ' WHERE VersionId = ' + CAST(@v_valueVersion as nvarchar) + ' AND Month = CONVERT(NVARCHAR(6),GETDATE(),112) '
date这个专栏是一个datetime专栏,在这里声明:(Month专栏和date专栏是两个不同的东西,它们不是指同一时期)
DECLARE @v_maxDate as datetime
这是我的问题:
EXEC sp_executesql @v_query, N'@v_maxDate datetime out', @v_maxDate out
当我得到这个时,SELECT 子句给了我以下结果,这是一个很好的结果:
-----------------------
2016-01-19 15:49:58.000
但是当我PRINT这个值的时候,什么都没有打印出来,这个值就是null。如何使用此存储过程取回一些日期时间值?甚至可能吗?
编辑: 正如 Adwaenyth 所说,以下查询完美运行:
DECLARE @query nvarchar(max) = 'SELECT @v_maxDate = MAX(create_date) FROM sys.tables'
DECLARE @v_maxDate datetime
EXEC sp_executesql @query, N'@v_maxDate datetime out', @v_maxDate out
PRINT @v_maxDate
我在查询中使用多个变量这一事实是否可能会修改结果?
【问题讨论】:
标签: sql sql-server datetime stored-procedures