我想從SQL Server中的兩個單獨的數據庫中連接兩個不同的表,我可以通過手動添加數據庫名來完成,但我想從另一個表中獲取表名。這就是我所做的。SQL Server,使用存儲過程中的函數
我創建了一個返回數據庫名稱的function
。就是這個。
ALTER FUNCTION [dbo].[GetDatabaseName]
(@name Nvarchar(50))
RETURNS Varchar(Max)
AS
BEGIN
DECLARE @Database_name Varchar(Max)
SET @Database_name= (SELECT value FROM dbo.setting WHERE name = @name)
RETURN @Database_name
END
它工作正常,並返回sh94
這是另一個數據庫的名字,我想創建一個存儲過程返回的連接的結果。
這是它:
CREATE PROCEDURE [dbo].[GParcel_shahrsazi]
@SourceDatabase INT
AS
BEGIN
DECLARE @DbName varchar(MAx)
SET NOCOUNT ON;
IF @SourceDatabase = 1
SET @DbName = CAST(dbo.GetDatabaseName('ShDB') as VARCHAR)
ELSE
SET @DbName = dbo.GetDatabaseName('NoDB')
END
SET @DbName = CAST(dbo.GetDatabaseName('ShDB') as VARCHAR)
SELECT *
FROM dbo.Gparcel AS p
INNER JOIN @DbName.dbo.GISMappingAttributeTable AS att ON p.FK_BlockNo = att.FK_BlockNo
AND p.FK_LandNo = FK_LandNo
END
GO
其中GISMappingAttributeTable
是在另一個數據庫的視圖名稱。
這會引發錯誤
消息102,級別15,狀態1,過程GParcel_shahrsazi,第25行
附近有語法錯誤 ''。
在該行
SELECT *
FROM dbo.Gparcel as p
INNER JOIN @DbName.dbo.GISMappingAttributeTable as att ON
我可以輕鬆地運行
SELECT *
FROM dbo.Gparcel as p
INNER JOIN sh94.dbo.GISMappingAttributeTable as att ON p.FK_BlockNo =att.FK_BlockNo And p.FK_LandNo=att.FK_LandNo
沒有問題,但是當我嘗試將其添加到存儲過程中它給我的錯誤。有人可以幫我找出問題嗎?
謝謝
您將需要使用動態TSQL –
@MitchWheat你能解釋更多嗎? –
[你不能在sql server中標識參數。](http://stackoverflow.com/questions/36419576/i-need-to-pass-column-names-using-variable-in-select-statement-in- store-procedures/36419620#36419620)你需要爲此使用動態sql。 –