Форум программистов, компьютерный форум, киберфорум
Наши страницы

Microsoft SQL Server

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
I_like_C++
29 / 29 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
#1

Таблица - глобальная переменная: как? - SQL Server

02.04.2012, 00:21. Просмотров 1786. Ответов 5
Метки нет (Все метки)

Собственно, вопрос в заголовке: как объявить/использовать глобальную переменную типа table?

Задание:
Найти сколько раз встречается каждая буква алфавита в названиях книг.
Вывод: буква, количество повторений

в кратце, что я делал:

создал функцию ABC_table(1) создает табллицу с русским алфавитом
потом я пытаюсь объявить глобальную переменную table

T-SQL
1
2
3
4
declare @@AbcTable table( word varchar(1),cnt int)
insert into @@AbcTable
select *
from dbo.ABC_table(1)
в функции fn_count_word я подсчитываю число каждой буквы в слове sValue и обновляю глабальную (как я думаю) таблицу AbcTable

но вывести результат не получается=(

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
IF OBJECT_ID (N'dbo.ABC_table') IS NOT NULL --существует ли функция 'dbo.ABC_table'? 
    DROP FUNCTION dbo.ABC_table;                        --если существует - удаляем ее
GO
--функция создает таблицу с буквами алфавита
create function [dbo].ABC_table (@privet as int)
    returns @mytable table ( word varchar(1), --буква
                    cnt int         --количество
                  )
as
begin
 
    declare @temp int=0
    while @temp < 32 --заполнение алфавита
    begin
        insert into @mytable values (CHAR(ASCII('а')+ @temp), 0)
        set @temp +=1
    end
return 
end
go
 
declare @@AbcTable table( word varchar(1),cnt int)
insert into @@AbcTable
select *
from dbo.ABC_table(1)
 
 
IF OBJECT_ID (N'dbo.fn_count_word') IS NOT NULL --существует ли функция 'dbo.fn_count_word? 
    DROP PROC dbo.fn_count_word;                        --если существует - удаляем ее
GO
--если не существует, то создаем ее
CREATE PROC [dbo].[fn_count_word] (@sValue as varchar(20))
    --RETURNS int
AS
BEGIN
 
DECLARE
        @strlen int,
        @curPos int,
        @temp varchar(1)
 
SET @strlen = LEN (@sValue) 
SET @curPos = 1
 
WHILE @curPos <= @strlen
    BEGIN
        set @temp = substring(@sValue, @curPos,1) --вырезаем по букве из названия
        
        update ##AbcTable --обновляем таблицу букв
        set ##AbcTable.cnt +=1
        where ##AbcTable.word = @temp
        set @curPos +=1
    END
RETURN
END
Go
 
select dbo.fn_count_word(name)
from book
 
select *
from @@AbcTable
--form ##AbcTable
на код сильно не ругайтесь....sql изучать я только начал
таблица Book если че вот
T-SQL
1
2
3
4
5
6
create table Book
(
    id_books int primary key Identity, 
    name varchar(50), 
    date_out datetime Default (GetDate())
)
СПАСИБО!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2012, 00:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Таблица - глобальная переменная: как? (SQL Server):

Имя базы данных в скрипте как переменная - SQL Server
Здравствуйте! Не нашла подобной темы. Я не сильна в T-SQL, и нагуглить так ничего и не смогла. У меня есть скрипт для создания БД. Вот...

Архив как таблица - Базы данных
Правильно ли создавать таблицу как архив из какой-то существующей таблицы. В эту архивную добавиться ключевое поле и поле даты или лучше...

CURSOR + временная таблица... Как сделать? - SQL Server
Есть проблема: во временную таблицу, имя которой каждый раз генериться и сохраняется в переменной @tmpName, заливаются данные. ...

Как программно определить есть ли таблица и ее структуру в SQL - Базы данных
Проблема заключается в следующем. В приложение по работе с БД вводиться параметры базы на SQL сервере, приложение должно определить есть...

Как узнать, что на SQL Server изменилась таблица ? - SQL Server
Ранее хватало узнать было ли добавление в таблицу другим пользователем - определял через запрос COUNT Теперь нужно узнать было ли...

Как узнать какая строка и таблица была обработана? - SQL Server
Здравствуйте. Подскажите пожалуйста, как можно узнать в какой таблице и строке этой таблицы произошли изменения?

5
iap
759 / 569 / 104
Регистрация: 27.11.2009
Сообщений: 1,684
02.04.2012, 10:17 #2
Зачем глобальная переменная (не бывает), зачем функция, слющай, а?
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SET NOCOUNT ON;
declare @Book table
(
    id_books int primary key Identity, 
    name varchar(50), 
    date_out datetime Default (GetDate())
);
 
INSERT @Book([name]) VALUES
 ('Война и мир')
,('Капитанская дочка');
 
SELECT B.id_books, V.Symbol, V.[Count]
FROM @Book B
CROSS APPLY
(
 SELECT LOWER(SUBSTRING(B.[name],V.number,1)), COUNT(*)
 FROM master.dbo.spt_values V
 WHERE V.type='P'
   AND V. number BETWEEN 1 AND LEN(B.[name])
   AND SUBSTRING(B.[name],V.number,1)LIKE'[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]'
 GROUP BY LOWER(SUBSTRING(B.[name],V.number,1))
)V(Symbol,[Count])
ORDER BY B.id_books, V.Symbol;
1
I_like_C++
29 / 29 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
02.04.2012, 10:44  [ТС] #3
спасибо, конечно... но твой запрос неадекватно работает, даже на твоих данных=)

Добавлено через 2 минуты
можно как нибудь мой запрос переделать, чтоб работало?) например, может отрпавлять в функцию переменную таблицу, чтоб она изменялась там? как это сделать?

Добавлено через 3 минуты
а не не не=) все правильно=) не догнал я че то, конструкция CROSS APPLY не совсем понятна, как то сложный метод=)

Добавлено через 7 минут
можешь пояснить что делает твой запрос? почему он не группируется по id_books?
0
iap
759 / 569 / 104
Регистрация: 27.11.2009
Сообщений: 1,684
02.04.2012, 13:07 #4
Цитата Сообщение от I_like_C++ Посмотреть сообщение
[size="1"]почему он не группируется по id_books?
Для каждого id_books получается много строк с разными символами.
Как же их надо отобразить в одной строке для каждого id_books? А?

Надо бы уточнить, что имеется в виду под "группируется по id_books"...
1
I_like_C++
29 / 29 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
02.04.2012, 13:44  [ТС] #5
вопрос не по теме:

у меня есть таблица Book, там есть какие то значения, как мне взять оттуда например 3ий элемент и отправить в функцию?
0
pincet
1252 / 824 / 91
Регистрация: 23.07.2010
Сообщений: 4,257
02.04.2012, 15:50 #6
в таблице нет третьего элемента. можно попробывать найти элемент, с известным значением какого-либо поля. (чаще всего, индекса)
0
02.04.2012, 15:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2012, 15:50
Привет! Вот еще темы с ответами:

Как выяснить запросом, есть ли таблица на сервере, или нет? - SQL Server
с помошью чего это можно выяснить ?

Глобальная переменная, как сделать - VBA
Здравствуйте, как объявить глобальную переменную единую для всех процедур.

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз - C++
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */

Переменная сессии видна как глобальная - PHP
Всех приветствую. Помогите, пожалуйста, разобраться. Есть переменная $_SESSION. Почему при обращении к переменной $name, которую я не...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru