簡體   English   中英

SQL Function 變量作為數據庫名稱在 SELECT

[英]SQL Function with Variable as db name within SELECT

我的第一個問題是嘗試使用返回值作為 JOIN 上數據庫名稱的變量。

我最初遇到這個網站: 鏈接

從這里我需要創建我的第一個 SQL function,而且我只能用標量值 Function 得到某個地方,因為我相信需要執行查詢以使用 EX .

我的 function 看起來像這樣:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION getDocumentNumber(@jobNo char(8), @docID int) 
RETURNS varchar
AS
BEGIN
    DECLARE @dbName varchar(50)
    DECLARE @sql varchar(500)
    DECLARE @output varchar(50)

    SET @dbName = 'Job_' + @jobNo
    SET @sql = 'SELECT d.[Doc No Int] 
    FROM [' + @dbName + '].[dbo].[Documents] d 
    WHERE d.[id] = ' + @docID

    EXEC @sql = @output 
    RETURN @output
END
GO

我原來的 SELECT 語句現在看起來像這樣:

 SELECT CONCAT(ty.name, '-', co.code, ' ', FORMAT(rt.number, '000'), ' response overdue.') AS 'Description', rt.[response_due_date] AS 'Date Due', [dbo].getDocumentNumber(p.[Job Number], rt.[document_id]) AS 'Document No.', p.[Job Number] AS 'Job No.', p.[Job Title] AS 'Job Title', p.[Project Manager], 'RFI / TQ' AS 'Type' FROM [Project].[dbo].[RFI_TQ] rt JOIN [Project].[dbo].[RFI_TQ_Type] ty ON rt.type_id = ty.id JOIN [MyCompany].[dbo].[Company] co ON rt.company_id = co.id JOIN [Job_Register].[dbo].[Projects] p ON rt.project_id = p.id WHERE rt.[response_due_date] < CURRENT_TIMESTAMP AND p.[Project Manager] = 'Full Name' ORDER BY rt.response_due_date DESC;

當我嘗試執行時,出現以下錯誤:

消息 245,級別 16,State 1,第 1 行 將 varchar 值 'SELECT d.[Doc No Int] FROM [Job_00000001].[dbo].[Documents] d WHERE d.[id] = ' 轉換為數據時轉換失敗輸入整數。

我已經查看並搜索過,我認為我的問題是從 EXEC() 獲取返回值,但我不知道如何編寫 SELECT 語句,而不使 SELECT 語句成為 varchar 變量。

任何幫助將不勝感激。

謝謝你。

編輯:為 html 代碼片段道歉,它不會讓我用 Ctrl + K 代碼縮進發布該部分。

在 function 里面你不能使用 EXEC 命令。 您可以嘗試編寫動態 sql 並使用 sp_executesql 執行它,而不是使用 function。 請查看這篇文章,希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM