我有一个数据库与不同的表(所有相同的结构),我想运行存储过程有一个参数,该参数定义要查询的表。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