我有一個SQL Server中的動態SQL查詢。所以我構建它,將其設置爲變量,然後嘗試根據日期格式化where子句。但是,當我嘗試這樣做時,我得到「多部分標識符」FIELD NAME「不能被綁定。我相信這是因爲實際的表格從克勞斯處於動態的狀態,所以在編譯之前無法看到它們。任何方式在這個?如何在動態SQL查詢中引用字段?
在這裏,我試圖說,給我指定的地方年+月之間DOB所有的人,例如,201001和201012是2010年這裏整個一年中的部分代碼....
ALTER PROCEDURE get_persons_by_search_criteria
@month_from as nvarchar(2) = null,
@year_from as nvarchar(4) = null,
@month_to as nvarchar(2) = null,
@year_to as nvarchar(4) = null
AS
declare @from_date varchar(10)
declare @to_date varchar(10)
declare @sqlstr varchar(5000)
set @sqlstr = ' SELECT
Person.PersonID,
Person.FirstName,
Person.LastName,
FROM Person '
--Attemtping to create a value like 201108 (year + month)
set @from_date = Convert(VarChar(10), @year_from) + Replace(Str(@month_from, 2), ' ', '0')
set @to_date = Convert(VarChar(10), @year_to) + Replace(Str(@month_to, 2), ' ', '0')
set @sqlstr = @sqlstr + ' WHERE '
set @sqlstr = @sqlstr + Convert(VarChar(10), Person.DOBYear) + Replace(Str(Person.DOBMonth, 2), ' ', '0')
set @sqlstr = @sqlstr + ' BETWEEN ' + @from_date + ' and ' + @to_date
exec(@sqlstr)
這看起來並不需要是動態SQL。爲什麼你不能使用[這種技術](http://stackoverflow.com/questions/7212339/how-do-i-do-a-comparison-with-just-a-month-and-year-not-a -complete-date/7214021#7214021)從你以前的問題? –
請在提問時指出SQL Server的版本。 @ Martin的記憶顯然比我的記憶好,但是我們並不都知道你上次被問及「SQL Server的哪個版本?」 –