Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Предайте таблицата като параметър в UDF на sql сървъра

Можете обаче да нямате никаква маса. От документацията:

За функциите на Transact-SQL всички типове данни, включително CLR потребителски дефинирани типове и потребителски дефинирани типове таблици, са разрешени с изключение на типа данни за времеви печат.

Можете да използвате дефинирани от потребителя типове таблици .

Пример за дефиниран от потребителя тип таблица:

CREATE TYPE TableType 
AS TABLE (LocationName VARCHAR(50))
GO 

DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable

Така че това, което можете да направите, е да дефинирате вашия тип таблица, например TableType и дефинирайте функцията, която приема параметъра от този тип. Примерна функция:

CREATE FUNCTION Example( @TableName TableType READONLY)
RETURNS VARCHAR(50)
AS
BEGIN
    DECLARE @name VARCHAR(50)

    SELECT TOP 1 @name = LocationName FROM @TableName
    RETURN @name
END

Параметърът трябва да бъде САМО ЧЕТЕНЕ. И примерна употреба:

DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable

SELECT dbo.Example(@myTable)

В зависимост от това, което искате да постигнете, можете да промените този код.

РЕДАКТИРАНЕ: Ако имате данни в таблица, можете да създадете променлива:

DECLARE @myTable TableType

И вземете данни от вашата таблица в променливата

INSERT INTO @myTable(field_name)
SELECT field_name_2 FROM my_other_table


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SWITCHOFFSET() Примери в SQL Server

  2. Методи за класиране на редове в SQL Server:ROW_NUMBER(), RANK(), DENSE_RANK() и NTILE()

  3. Как да добавите разделител към конкатениран низ в SQL Server – CONCAT_WS()

  4. T-SQL за намиране на име на отдалечен сървър на свързания сървър

  5. Ескалация на заключване на SQL сървър