[英]Dynamic query in SQL Server 2008 R2?
在SQL Server 2008 R2中,我試圖在動態查詢中使用varchar
和datetime
類型的參數調用函數。
我的查詢如下所示:
declare @Query nvarchar(max)
declare @date datetime
set @date ='02/02/2015'
set @Query = 'select xxx, dbo.myfunction(yyy,'+date +',sa) '
exec @Query
當我執行此查詢時,出現錯誤:
從字符串轉換日期時間時轉換失敗。
在使用動態查詢時,在定義變量( @Query
)以執行查詢時,其數據類型為nvarchar
或varchar
。
因此,在傳遞參數時,必須將任何值轉換為nvarchar
或varchar
類型。
所以簡單地做到這一點。 連接字符串時,請始終給空格。
set @Query = 'select xxx, dbo.myfunction(yyy,' + cast( date as nvarchar(50)) + ',sa) '
使用這種不變的日期格式,您也可以通過date
而不是@date
:
DECLARE @Query NVARCHAR(MAX)
DECLARE @date DATETIME
SET @date = '20150202'
SET @Query = 'select xxx, dbo.myfunction(yyy,''' + CONVERT(NVARCHAR(8), @date, 112) + ''',sa) '
PRINT @Query
但是您可以直接將@date聲明為varchar,還需要在yyy
和sa
周圍添加引號:
DECLARE @Query NVARCHAR(MAX)
DECLARE @date NVARCHAR(8) = '20150202'
SET @Query = 'select xxx, dbo.myfunction(''yyy'',''' + @date + ''',''sa'') '
PRINT @Query
試試這一行:
set @Query = 'select xxx, dbo.myfunction(yyy,'''+date +''',sa) '
這樣,日期被引用。 同樣,@ @date
可能更好地聲明為字符串。
嘗試這個,
declare @Query nvarchar(max)
declare @date datetime
set @date ='02/02/2015'
set @Query = 'select xxx, dbo.myfunction(''yyy'','''+CAST(@date as nvarchar) +''',''sa'')'
EXECUTE sp_executesql @Query
您可以在函數中將@date轉換為datetime。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.