[英]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.