我在SQL Server中遇到了一個問題。我必須使用存儲過程sp_executesql
這是一個系統過程,因爲我做select子句的表取決於另一個參數。帶日期時間輸出參數的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
...
但現在,我想從我的原始表中取回一列,(whi CH是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
難道是我在查詢中使用多個變量的事實改變了結果?
謝謝Adwaenyth,我試過這個,但是我沒有工作,當我嘗試打印它時,我的'@ v_maxDate'仍然是空的。但是,我的'SELECT'子句的結果現在在列的頂部有一個名字,即'@ v_maxDate' –
請參閱編輯。只是自己試了一下,它的工作...也許嘗試在那裏簡單的查詢,並檢查是否可以在您的服務器上工作。 – Adwaenyth
你是對的,這個完美的作品...我不明白爲什麼它不適用於另一個! –