我有一個數據庫與不同的表(所有相同的結構),我想運行存儲過程有一個參數,該參數定義要查詢的表。SQL存儲過程 - 表作爲參數
我似乎無法推測出來:
CREATE SCHEMA test;
GO
首先,我創建的模式
CREATE TYPE DataType as TABLE (
[datetime] [datetime] NULL,
[testVar] [bigint] NULL)
GO
然後,我創建的表型
USE [TestDataFiles]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [test].[testing]
(
-- Add the parameters for the stored procedure here
@datetime datetime,
@t DataType READONLY
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON
select top(10) *
from @t
where [datetime] > @datetime
END
GO
然後,我創建了存儲過程。
Exec test.testing @t = 'table.1', @datetime = '2017-01-01'
然而,當我把它稱爲我收到以下錯誤:與
Msg 206, Level 16, State 2, Procedure test, Line 0 [Batch Start Line 0] Operand type clash: varchar is incompatible with DataType
同樣的情況:
Exec test.testing @t = [table.1], @datetime = '2017-01-01'
我已經看到了一個例子,其中begin
和select
之間的過程中你把這樣的東西:
INSERT INTO table.1
(datetime, testVar)
但table.1(或table.2等我有一個表的列表)有數據,我不想改變它。
除非我打算創建一個虛擬表,就像我做了TYPE?
我在網上找到的例子並沒有用。
聽起來就像你只是想傳遞一個表名並查詢該表。這將需要動態SQL,我相信是你想要的。 –
我找不到任何這樣的例子,鏈接或解釋將不勝感激。本質上,我寫的R代碼即將跨不同的表調用SQL存儲過程。我不想爲n個表創建相同的SP – Olivia