Это SQL Server, или MySQL, или Oracle, или MS Access, или ... что?Пожалуйста, измените TAG, связанный с вопросом.Ответы необходимо будет соответствующим образом изменить.
Вместо того, чтобы начинать новый ответ, отредактируйте первый вопрос, а в конце того, что там было, добавьте разделитель >>>>
, а затем вставьте свои исправления или исправления, сохраняявсе, что было выше этого.
Затем, имейте в виду, что
Declare @SQL NVARCHAR(50)
должно быть (500)
(или больше), потому что то, что мы придумаем, может быть длинным SQL.
То, что я получил от второго SQL, было
select *
from LLL as p
join z as z on p.C = z.C
wher
, которое было усечено после 50 символов.
Кроме того, оно может быть продолжено в несколько строк, поэтому давайте обернем его для удобства чтения.Как это выглядит без параметров?
Кроме того, аргументы не должны быть отдельными буквами (@z, @s, @l, а также s, z, p, ...), но должны быть описательными.
Наконец, нам нужно начать с того, как будет выглядеть вывод.
Кажется, что в процедуре SQL есть только select с объединением.Это должно быть выполнено 100 раз?100 результатов?
Или мы пытаемся объединить 100 таблиц в ОДИН результат?
Наконец, давайте посмотрим некоторые входные данные.Поэтому, пожалуйста, покажите нам эти имена таблиц, запустив и вставив первые 5 или 10 строк из
USE StackOver-or-your-db-name;
SELECT name, max_column_id_used
FROM sys.Tables (maybe, WHERE name like 'xxx*')
И структуру одного входного DDL.
И первые несколько строк данных вскажем, POR
Когда вы скажете, что это не работает, сообщите нам строку в SQL и полученное сообщение.
---------- 24 февраля 1:00
Хороший прогресс.Давайте не будем создавать proc 1st, а вместо этого заставим работать sql.
Пожалуйста, измените arg @zwyc на другое имя, отличное от имени таблицы, чтобы избежать путаницы;может быть @ cname.
Пожалуйста, напечатайте несколько строк таблицы zwyc, к которой присоединяется.Вот что я тестирую.Я добавил много пар кавычек, чтобы окружить их.И прямо перед EXEC я добавил
Print @sql
, чтобы посмотреть, какой SQL будет выполняться.Затем измените мои значения sql arg на те, которые вам подходят, и вставьте обратно в вашу область выше, чтобы я знал, что вы пытались ... отмечая любые дальнейшие проблемы ...
Declare
@zwyc nvarchar(50) = 'Poland' ,
@season nvarchar(50) = '2012/2013' ,
@ateam nvarchar(50) = 'Wisla',
@lig nvarchar(50) = '[StackOver].[dbo].[DynamicQueryPOL]'
Declare @SQL NVARCHAR(max)
set @SQL = 'select * from ' + @lig + ' as p
join zwyc z on p.Country=z.Country
where ( p.home = ''' + @ateam + ''' OR p.away = ''' + @ateam + ''' )
and p.season = ''' + @season + ''' and z.zwyc = ''' + @zwyc + ''''
print @sql
--exec (@sql)
---------- 24 февраля 13:30 PDT
Хороши ли результаты?С исправленными парами одинарных кавычек вокруг аргументов это, кажется, работает.
Всегда ли предоставлены все 3 аргумента?Или некоторые из них могут быть нулевыми / не предоставлены?
Я заметил, что p.country в списке всегда 'Польша'
Почему мы присоединяемся?Мы получаем только 1 ряд назад?Похоже, мы получаем около 12 строк ...
join zwyciezcy z on p.Country=z.Country
И эти 12 строк затем фильтруются по названию команды только в одну.
where ::: z.Zwyciezca='Slask Wroclaw'
Но мы не используем другие столбцы изтаблица zwyciezcy z.Так почему же выполняется соединение?
Пожалуйста, напечатайте несколько строк таблицы zwyciezcy, к которой присоединяется.