【问题标题】:How to DECLARE TYPE myType AS TABLE?如何将类型 myType 声明为表?
【发布时间】:2021-08-05 16:28:44
【问题描述】:

我正在尝试使用表值参数将列传递给 SQL Server 中的“IN”子句。为此,我需要声明一种表。 SQL 表达式:

DECLARE TYPE myType AS TABLE( myid varchar(50) NULL);

给出错误:

'myType' 不是可识别的 CURSOR 选项。

将 DECLARE 替换为 CREATE 效果很好。 使用“CREATE”需要在任何下一个 SQL 调用中删除这种类型,例如:

IF TYPE_ID('myType') IS NOT NULL DROP TYPE myType;

但我只想在这个 SQL 表达式中使用类型“myType”。 如何将一个类型声明为表而不永久创建它并且不在所有请求中删除它?

【问题讨论】:

  • 你为什么不直接创建这个?无法即时创建一个仅限于单个请求的请求
  • 我倾向于为各种查询和过程准备一堆通用的单列和两列表类型,然后你不必每次都声明它们

标签: sql sql-server tsql


【解决方案1】:

DECLARE 需要以下 sinthax:

DECLARE @LastName NVARCHAR(30), @FirstName NVARCHAR(20), @Country NCHAR(2);

使用DECLARE,您可以:

  • 分配变量名(使用@)。
  • 分配变量类型
  • 分配一个NULL默认变量值

所以"DECLARE TYPE" 不是一个有效的声明。

查看临时表在 sql 中。 可以使用以下代码在sql中创建临时表:

CREATE TABLE #TempTable
(
    name VARCHAR(50),
    age int,
    gender VARCHAR (50)

)

INSERT INTO #TempTable
SELECT name, age, gender
FROM student
WHERE gender = 'Male'

使用临时表,您可以将标准表中的数据子集存储一段时间。

临时表存储在“tempdb” 中,这是一个系统数据库。

【讨论】:

  • 并且可以声明一个表变量:DECLARE @MyTable TABLE(FirstName VARCHAR(50), ...
  • @Tyron78,有没有办法将新表声明为“@MyTable”类型?
  • @BlackMath,因为 DECLARE TYPE 无效,有没有办法先声明一个表变量,然后采用该表的类型?
  • @ildar 不,您不能声明类型 - 您只能创建它。但是你到底想达到什么目的?如果您需要将表作为参数传递,为什么不在数据库中创建它(因为您提到效果很好)?
猜你喜欢
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多