2011-03-02 52 views
1

我正在構建一個SQL sting,主要是WHERE子句,它基於傳入的參數並執行構建的字符串。所以最後它是:EXEC(@strSELECT + @strFROM + @strWHERE + @strORDERBY)。T-SQL:構建SQL字符串中的引用語法

我@strSELECT樣子:SET @strSELECT =「SELECT DISTINCT FIELDA,FIELDB,FIELDC」

這一切工作,到目前爲止,但現在我添加了一個嵌套函數場@strSELECT結束等全@strSELECT現在看起來像:SET @strSELECT ='SELECT DISTINCT FieldA,FIELDB,FIELDC,UPPER(REPLACE(CONVERT(VARCHAR,CAST(MyStringDateField AS DATETIME),6),'',' - '))AS FormattedDate'

我知道新的嵌套功能領域的作品,因爲我沒有concantenation測試它,我也知道問題是與單引號['',' - ']內的函數。任何人都可以幫助我建立查詢字符串時正確的報價語法?日Thnx。

回答

1

你必須讓你的嵌套函數看起來就像這樣:

UPPER(REPLACE(CONVERT(VARCHAR,CAST(MyStringDateField爲DATETIME),6), '' '', '' - '') )

+0

thnx。這工作!...我讓它太複雜 – Kevin 2011-03-02 21:45:56

1

將字符串中的引號加起來。這對我的作品,並返回「02-MAR-11」:

DECLARE @strSELECT nvarchar(200) 
SET @strSELECT = 'SELECT UPPER(REPLACE(CONVERT(VARCHAR, CAST(GETDATE() AS DATETIME),6),'' '',''-'')) AS FormattedDate' 
EXECUTE sp_executesql @strSELECT 
+0

thnx。這工作!...我讓它太複雜 – Kevin 2011-03-02 21:46:40

1

要在前面加上你的另一個單引號一個T-SQL字符串插入一個單引號。因此,您的@strSelect語句變爲

SET @strSELECT = 'SELECT DISTINCT FieldA, FIELDB, FIELDC, UPPER(REPLACE(CONVERT(VARCHAR, CAST(MyStringDateField AS DATETIME),6),'' '',''-'')) AS FormattedDate' 

這並不意味着這是正確的方法。您應該嘗試儘可能使用參數化查詢以避免sql注入攻擊

+0

thnx。那就工作了!......我讓它變得太複雜了 – Kevin 2011-03-02 21:45:31