1
這項工作我們正在SQL Server 2008和2012編寫基於SQL Server版本
我想寫的是將要使用Format
功能的功能上運行的客戶端SQL函數。我有一個與SQL Server 2008中的Format
幾乎完全相同的自定義函數,但其性能比Format
差。
我想使它成爲有條件的,如果它在SQL Server 2012上運行,那麼它會使用內置的T-SQL Format
,如果它在SQL Server 2008上,那麼它使用我自己的自定義函數。在SQL Server 2008
CREATE FUNCTION [system].[FunctionName1]
(
@param1 VARCHAR(MAX),
@param2 VARCHAR(MAX)
)
RETURNS nvarchar(Max)
AS
BEGIN
DECLARE @SQLVersion VARCHAR(16) = CONVERT(VARCHAR(16), SERVERPROPERTY('ProductVersion'))
SET @SQLVersion = LEFT(@SQLVersion, ISNULL(NULLIF(CHARINDEX('.', @SQLVersion, 1 + CHARINDEX('.', @SQLVersion)) - 1, - 1), 0))
DECLARE @Return DECIMAL(4, 2) = CASE
WHEN ISNUMERIC(@SQLVersion) = 1
THEN CONVERT(DECIMAL(4, 2), @SQLVersion)
ELSE 0
END
IF @Return > 11.0
BEGIN
RETURN Format(@param1, @param2)
END
ELSE
BEGIN
RETURN Format_Custom(@parm1, @param2)
END
RETURN NULL
END
的問題是:
所以我寫了這樣的功能的format
功能是未知的。所以當我想部署它時會引發語法錯誤。我已經爲它配置了部署腳本。但我想知道我可以以某種方式與SQL內置函數通過Format
行或忽略它?
他可以不執行依賴於版本的動態SQL嗎?那麼它不會被編譯 –
@Alec - 正如我所說的,你不能在一個函數中做動態SQL。 –
對不起,我誤讀了那部分。 –