2016-09-20 11 views
0

請有人可以幫助我瞭解如何使以下函數正常工作。我找到了一個可以正常工作的northwind示例,但是通過使用我需要的語法對其進行了更改。當選中所有行時,我會收到一個錯誤消息,指出在期望條件的上下文中指定了非布爾類型的表達式,即'effec'附近。我需要修改了聲明如下:exec sp_executesql語句會導致錯誤「在預期條件的上下文中指定的非布爾類型的表達式」

select max(person_sid) from dim_person 
where [Effective_To] <='2015-10-01' 
group by person_id_number 

declare @sql nvarchar(50), @dt datetime; 

set @dt = '2015-10-01'; 

set @sql = N'SELECT max(person_sid) FROM dim_person WHERE effective_to <= @date'; 

exec sp_executesql @sql, N'@date datetime',@dt; 
+0

那麼,當然,如果你只是選擇最後一行,它會說「@sql必須聲明」 - 它被聲明在上面幾行。如果你只是選擇了最初的'select ....'三行,會發生什麼?它運行正常嗎? – Jamiec

+0

你好,是的,一切工作正常,我得到輸入的列中的數據,它只是最後一個執行最後,似乎並沒有與其他一切工作。 – Ryan

+1

在動態SQL字符串中計數50個字符。請參閱第45-50個字符是'effec' – Jamiec

回答

2

您正在定義@sql爲NVARCHAR(50)

但是你人物更多加油吧...

儘量放大其大小, 可以說:

DECLARE @Sql AS NVARCHAR(4000) 
+1

Ack,我離這個答案只有幾秒鐘的距離。 – Jamiec

1

使用下面的腳本。給變量@sql提供足夠的寬度以適應查詢。

DECLARE @sql nvarchar(MAX), @dt datetime; 

set @dt = '2015-10-01'; 

set @sql = N'SELECT max(person_sid) FROM dim_person WHERE effective_to <= @date'; 

exec sp_executesql @sql, N'@date datetime',@dt; 
相關問題