Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 8
1

Добавление вычислимого столбца в временную таблицу MS SQL

05.10.2023, 09:03. Показов 403. Ответов 7

Author24 — интернет-сервис помощи студентам
Добрый день.

Во временную таблицу необходимо вставить вычисляемый столбец с функцией, написанной ранее.

При создании вычисляемого столбца с выражением, задаваемым в описании проблем нет.

Пример:
T-SQL
1
2
3
4
5
6
7
8
USE [DB]
GO
 
CREATE TABLE #t(idA int, idB int, idRes AS idA +idB)
INSERT INTO #t(idA, idB) VALUES (1,1)
SELECT * FROM #t
 
DROP TABLE  #t
При создании временной таблицы с моей функцией выдает разные ошибки.
Пример.
T-SQL
1
2
3
4
5
6
USE [DB]
GO
 
CREATE TABLE #t(idA int, idB int, idRes AS MyFunc(idA,idB))
 
DROP TABLE  #t
При таком описании была ошибка: 'MyFunc' is not a recognized built-in function name. Хотя она есть.

Вопрос: можно ли задать во временной таблице свою функцию? Если да, то что не так?

Функция, на которую ссылка, ниже.

T-SQL
1
2
3
4
5
6
CREATE FUNCTION [dbo].[MyFunc](@L int, @H int)  
RETURNS int AS  
BEGIN 
    
    RETURN @L+@H
END
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2023, 09:03
Ответы с готовыми решениями:

Добавление столбца во временную таблицу
Всем привет. Имеется код T-SQL в котором я копирую данные из Table1 в #TempTable: DROP TABLE...

Не могу удалить временную (#) таблицу в своей сессии (SQL/VB)
Клиентское приложение создает в базе временную таблицу: if exists (select * from dbo.sysobjects...

Добавление столбца в таблицу
Необходимо добавить столбец nalich в таблицу Sklad, если он не существует. При запуске выдаёт...

Добавление столбца в таблицу
Объясните, пожалуйста, конкретнее в чем ошибка CREATE DATABASE DB1 USE DB1 CREATE TABLE...

7
567 / 258 / 114
Регистрация: 12.04.2022
Сообщений: 945
05.10.2023, 11:01 2
Цитата Сообщение от TimSm Посмотреть сообщение
Вопрос: можно ли задать во временной таблице свою функцию? Если да, то что не так?
1. Да.

T-SQL
1
2
3
4
5
6
7
8
use tempdb
 
CREATE FUNCTION [dbo].[MyFunc](@L int, @H int)  
RETURNS int AS  
BEGIN 
    
    RETURN @L+@H
END
2. Ф-ия д.б. определена со схемой (idRes AS dbo.MyFunc(idA,idB)) и в той же БД в которой создаётся таблица:

T-SQL
1
CREATE TABLE #t(idA int, idB int, idRes AS dbo.MyFunc(idA,idB))
0
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 8
06.10.2023, 07:56  [ТС] 3
Спасибо. Но всё-равно не работает.

Проверка, что функция видна.
T-SQL
1
2
USE DB 
SELECT dbo.myfunc(1,1)
Выдаёт результат без ошибок. В той же базе.
T-SQL
1
2
3
USE DB
CREATE TABLE #t(idA int, idB int, idRes AS dbo.MyFunc(idA,idB))
DROP TABLE  #t
Выдает ошибку: "Cannot find either column "dbo" or the user-defined function or aggregate "dbo.MyFunc", or the name is ambiguous."

Всё в рамках одной БД, схема у функции задана, при вызове задана. Функция есть, она одна. С чем может быть связана ошибка?
0
1032 / 298 / 83
Регистрация: 14.10.2022
Сообщений: 953
06.10.2023, 08:25 4
Лучший ответ Сообщение было отмечено TimSm как решение

Решение

Да в tempdb твоя функция должна быть. Из другой БД нельзя функцию с вычислимым столбцом ассоциировать.
1
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 8
06.10.2023, 08:38  [ТС] 5
Понятно. Спасибо.
0
567 / 258 / 114
Регистрация: 12.04.2022
Сообщений: 945
06.10.2023, 09:07 6
Цитата Сообщение от TimSm Посмотреть сообщение
Но всё-равно не работает.
Обратите внимание на первую строчку кода

T-SQL
1
2
3
4
5
6
7
8
use tempdb
 
CREATE FUNCTION [dbo].[MyFunc](@L int, @H int)  
RETURNS int AS  
BEGIN 
    
    RETURN @L+@H
END
0
10 / 10 / 0
Регистрация: 17.04.2023
Сообщений: 99
06.10.2023, 16:47 7
Можно как вариант, вместо временной таблицы запрос обернуть в СТЕ (обобщенное табличное выражение).
0
1032 / 298 / 83
Регистрация: 14.10.2022
Сообщений: 953
06.10.2023, 18:08 8
Цитата Сообщение от andrey197888888 Посмотреть сообщение
Можно как вариант, вместо временной таблицы запрос обернуть в СТЕ (обобщенное табличное выражение).
А вот не всегда, к сожалению, это можно.
К сожалению, в sqlserver нету указания материализовать CTE.
И он будет пытаться оптимизировать это обобщенное табличное выражение "глубоко", и иногда - слишком глубоко.
Часто бывает выгодно загнать данные в темповую таблицу, построить в ней индексы, и только потом - считать.
0
06.10.2023, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2023, 18:08
Помогаю со студенческими работами здесь

Добавление столбца в таблицу
Объясните, пожалуйста, что происходит ли во второй строчке кода добавление столбца в таблицу...

Добавление столбца в таблицу БД
Доброе утро. Подскажите пожалуйста как программно добавить столбец в таблицу БД?...

Программное добавление столбца в таблицу
Возможно ли с помощью программного кода добавить столбец в таблицу?Если возможно, то как?

Добавление нового столбца в таблицу
Adoquery1.close; Adoquery1.sql; Adoquery1.sql.add(alter table KTZ add...

Добавление нового столбца в таблицу БД
Есть БД Access 2007. Никак не могу найти добавления нового столбца в таблицу,т.е при нажатии на...

Добавление нового столбца в таблицу БД
ну вообщем ситуация такая: есть база данных на интербэйзе и прога для нее написанная на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru