2013-06-18 19 views
0
的動態SQL值

我正在使用動態查詢,我需要表中的值。來自表

我到目前爲止查詢:

DECLARE @query varchar(1500) 
SET @query = 
'SELECT Id,' 
+ 'SUM(CASE WHEN ['+convert(varchar(50),CAST(myTable.myDate AS date),120)+'] = ['+convert(varchar(50), CAST(GETDATE() AS date), 120)+'] then [Counter] else 0 end) ''0'',' 
+ 'SUM(CASE WHEN ['+convert(varchar(50),CAST(DATEADD(day, -1, myTable.myDate)), 120)+'] = ['+convert(varchar(50),CAST(DATEADD(day, -1, GETDATE()) AS date), 120)+'] then [counter] else 0 end) ''1'',' 
+ 'SUM(CASE WHEN ['+convert(varchar(50),CAST(DATEADD(day, -2, myTable.myDate)), 120)+'] = ['+convert(varchar(50),CAST(DATEADD(day, -2, GETDATE()) AS date), 120)+'] then [counter] else 0 end) ''2'',' 
+ 'SUM(CASE WHEN ['+convert(varchar(50), CAST(DATEADD(day, -3, myTable.myDate)), 120)+'] = ['+convert(varchar(50),CAST(DATEADD(day, -3, GETDATE()) AS date),120)+'] then [counter] else 0 end) ''3'',' 
+ 'SUM(CASE WHEN ['+convert(varchar(50),CAST(DATEADD(day, -4, myTable.myDate)),120)+'] = ['+convert(varchar(50),CAST(DATEADD(day, -4, GETDATE()) AS date),120)+'] then [counter] else 0 end) ''4''' 
+ 'FROM [myTable] GROUP BY Id' 
PRINT(@query) 
EXEC(@query) 

這不會工作,因爲它說:「多聲部identifyer‘myTable的’無法綁定。」在4-8行。

我見過的人recomending是這樣的:

CREATE TABLE #tmp 
(
    id varchar(50), 
    counter int, 
    myDate smalldatetime 
) 
Insert Into #tmp (id, counter, myDate) 
SELECT * FROM myTable 
--GO      --doesn't work either with or without 'go' 
DECLARE @query varchar(1500) 
SET @query = 
'SELECT Id,' 
+ 'SUM(CASE WHEN ['+convert(varchar(50),CAST(#tmp.myDate AS date),120)+'] = ['+convert(varchar(50), CAST(GETDATE() AS date), 120)+'] then [counter] else 0 end) ''0'',' 
+ 'SUM(CASE WHEN ['+convert(varchar(50),CAST(DATEADD(day, -1, #tmp.myDate)), 120)+'] = ['+convert(varchar(50),CAST(DATEADD(day, -1, GETDATE()) AS date), 120)+'] then [counter] else 0 end) ''1'',' 
+ 'SUM(CASE WHEN ['+convert(varchar(50),CAST(DATEADD(day, -2, #tmp.myDate)), 120)+'] = ['+convert(varchar(50),CAST(DATEADD(day, -2, GETDATE()) AS date), 120)+'] then [counter] else 0 end) ''2'',' 
+ 'SUM(CASE WHEN ['+convert(varchar(50),CAST(DATEADD(day, -3, #tmp.myDate)), 120)+'] = ['+convert(varchar(50),CAST(DATEADD(day, -3, GETDATE()) AS date),120)+'] then [counter] else 0 end) ''3'',' 
+ 'SUM(CASE WHEN [+'convert(varchar(50),CAST(DATEADD(day, -4, #tmp.myDate)), 120)+'] = ['+convert(varchar(50),CAST(DATEADD(day, -4, GETDATE()) AS date),120)+'] then [aounter] else 0 end) ''4''' 
+ 'FROM [myTable] GROUP BY Id' 
PRINT(@query) 
EXEC(@query) 

還不行。請幫忙!

簡化版本,我的問題:

DECLARE @query varchar(1500) 
SET @query = 'SELECT ['+myTable.value+'] FROM [myTable]' 
EXEC(@query) 

不起作用

+0

'FROM#tmp'是什麼將是如果使用臨時表(稱爲'#tmp')被加載了..有*是一個名爲'myTable'的表,對嗎?也就是說,當不在動態查詢中時'SELECT COUNT(*)FROM myTable'「工作」嗎?也許當前的模式與預期不同?如果是這樣,'[theCorrectSchema]。[myTable]'工作嗎? – user2246674

+0

是的,你在第二個例子中查詢錯誤或錯誤,從#tmp – mirkobrankovic

+0

是的,表「myTable」存在。如果我在動態外的mytable上執行SELECT COUNT(*)FROM,它會起作用。我試過[theCorrectSchema]。[myTable],它不起作用 –

回答

0

嘗試是這樣的:

CREATE TABLE #tmp 
(
    id varchar(50), 
    counter int, 
    myDate smalldatetime 
) 
Insert Into #tmp (id, counter, myDate) 
SELECT * FROM myTable 

DECLARE @query varchar(1500) 
Select @query = 
'SELECT Id,' 
+ 'SUM(CASE WHEN ''' + convert(varchar(50), #tmp.myDate,120) + ''' = '''+convert(varchar(50), GETDATE(), 120)+''' then ''counter'' else 0 end) ''0'',' 
+ 'SUM(CASE WHEN '''+convert(varchar(50), DATEADD(day, -1, #tmp.myDate), 120)+''' = '''+convert(varchar(50),DATEADD(day, -1, GETDATE()), 120)+''' then ''counter'' else 0 end) ''1'',' 
+ 'SUM(CASE WHEN '''+convert(varchar(50), DATEADD(day, -2, #tmp.myDate), 120)+''' = '''+convert(varchar(50),DATEADD(day, -2, GETDATE()), 120)+''' then ''counter'' else 0 end) ''2'',' 
+ 'SUM(CASE WHEN '''+convert(varchar(50), DATEADD(day, -3, #tmp.myDate), 120)+''' = '''+convert(varchar(50),DATEADD(day, -3, GETDATE()), 120)+''' then ''counter'' else 0 end) ''3'',' 
+ 'SUM(CASE WHEN '''+convert(varchar(50), DATEADD(day, -4, #tmp.myDate), 120)+''' = '''+convert(varchar(50),DATEADD(day, -4, GETDATE()), 120)+''' then ''counter'' else 0 end) ''4''' 
+ ' FROM ' from #tmp 
Set @query = @query + ' #tmp GROUP BY Id' 
PRINT(@query) 
EXEC(@query) 
+0

仍然不起作用。它不喜歡「+」從'#tmp'中的第二個「from」。它仍然不會讓我使用#tmp.myDate以上 –

+0

已編輯查詢,請檢查。 – unlimit

+0

對不起。仍然是「多部分標識符」#tmp.myDate「無法綁定 –