簡體   English   中英

SQL Server 2008 R2中的動態查詢?

[英]Dynamic query in SQL Server 2008 R2?

在SQL Server 2008 R2中,我試圖在動態查詢中使用varchardatetime類型的參數調用函數。

我的查詢如下所示:

declare @Query nvarchar(max)
declare @date datetime

set @date ='02/02/2015'
set @Query = 'select xxx, dbo.myfunction(yyy,'+date +',sa) '

exec @Query

當我執行此查詢時,出現錯誤:

從字符串轉換日期時間時轉換失敗。

在使用動態查詢時,在定義變量( @Query )以執行查詢時,其數據類型為nvarcharvarchar

因此,在傳遞參數時,必須將任何值轉換為nvarcharvarchar類型。

所以簡單地做到這一點。 連接字符串時,請始終給空格。

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,還需要在yyysa周圍添加引號:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM