Я получаю некоторые ошибки, как:Выполнение запроса SQL Server
Msg 205, уровень 16, состояние 1, процедура SearchUserswithLevels, Линия 29
Все запросы в сочетании с использованием UNION, INTERSECT или КРОМЕ оператор должен имеют равное количество выражений в своих целевых списках.
Я прилагаю мои таблицы, а также хранимую процедуру
CREATE TABLE [dbo].[Users]
(
[Login_ID] [bigint] IDENTITY(1,1) NOT NULL,
[Login_Name] [nvarchar](100) NOT NULL,
[Login_Password] [nvarchar](100) NULL,
[CreatedBy] [bigint] NULL,
[ModifiedBy] [bigint] NULL,
[Referal_ID] [bigint] NULL,
[Name] [nvarchar](250) NULL,
[User_Address] [nvarchar](max) NULL,
[Phone] [nvarchar](14) NULL,
[Email] [nvarchar](250) NULL,
[BankName] [nvarchar](250) NULL,
[AccountName] [nvarchar](250) NULL,
[IFSC] [nvarchar](250) NULL,
[AccountNo] [nvarchar](250) NULL,
[DOB] [datetime] NULL,
[Created_Date] [datetime] NULL,
[Modified_Date] [datetime] NULL,
[Last_Login_Date_Time] [datetime] NULL,
[UnsuscribeEmail] [int] NULL,
[UnsuscribeSms] [int] NULL,
[IsBanned] [int] NULL,
[ISDeleted] [int] NULL,
[Roles] [nvarchar](max) NULL,
[IDPROF] [nvarchar](250) NULL,
[IDPROFNO] [nvarchar](250) NULL,
[PANCARDNO] [nvarchar](250) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Моя хранимая процедура выглядит так:
CREATE PROCEDURE SearchUserswithLevels
(@SearchParameter NVARCHAR(250),
@Referal_ID BIGINT = NULL)
AS
BEGIN
DECLARE @CURRENTDATE AS DATETIME = GETDATE()
CREATE TABLE #temptable
(
ID BIGINT,
Login_Name NVARCHAR(100) NOT NULL,
NAME NVARCHAR(250) NULL,
Levels INT,
Referal_ID BIGINT NULL,
User_Address NVARCHAR(max) NULL,
Phone NVARCHAR(14) NULL,
Email NVARCHAR(250) NULL,
BankName NVARCHAR(250) NULL,
AccountName NVARCHAR(250) NULL,
IFSC NVARCHAR(250) NULL,
AccountNo NVARCHAR(250) NULL,
DOB DATETIME NULL,
IDPROF NVARCHAR(250) NULL,
IDPROFNO NVARCHAR(250) NULL,
PANCARDNO NVARCHAR(250) NULL
)
;WITH Hierarchy (
Login_ID,
Login_Name,
NAME,
Levels,
Referal_ID,
User_Address,
Phone,
Email,
BankName,
AccountName,
IFSC,
AccountNo,
DOB,
IDPROF,
IDPROFNO,
PANCARDNO
) AS
(
SELECT
Login_ID,
Login_Name,
NAME,
0,
Referal_ID,
User_Address,
Phone,
Email,
BankName,
AccountName,
IFSC,
AccountNo,
DOB,
IDPROF,
IDPROFNO,
PANCARDNO
FROM
Users AS FirtGeneration
WHERE
Referal_ID = @Referal_ID
UNION ALL
SELECT
NextGeneration.Login_ID,
NextGeneration.Login_Name,
NextGeneration.NAME,
Parent.Levels + 1,
Parent.Login_ID
User_Address,
NextGeneration.Phone,
NextGeneration.Email,
NextGeneration.BankName,
NextGeneration.AccountName,
NextGeneration.IFSC,
NextGeneration.AccountNo,
NextGeneration.DOB,
NextGeneration.IDPROF,
NextGeneration.IDPROFNO,
NextGeneration.PANCARDNO
FROM
Users AS NextGeneration
INNER JOIN
Hierarchy AS Parent ON NextGeneration.Referal_ID = Parent.Login_ID
)
INSERT INTO #temptable
SELECT
Login_ID, Login_Name, NAME,
(Levels + 1) AS Levels,
Referal_ID,
User_Address,
Phone, Email, BankName, AccountName,
IFSC, AccountNo, DOB, IDPROF, IDPROFNO,
PANCARDNO
FROM
Hierarchy
--WHERE Levels = @Levels
ORDER BY
Login_ID
OPTION (MAXRECURSION 32767)
SELECT
TP.ID, TP.Login_Name, TP.NAME,
TP.Levels, TP.Referal_ID, TP.User_Address,
TP.Phone, TP.Email, TP.BankName, TP.AccountName, TP.IFSC,
TP.AccountNo, TP.DOB, TP.IDPROF, TP.IDPROFNO
FROM
#temptable as TP
WHERE
(TP.Email LIKE '%' + @SearchParameter + '%')
OR (TP.Phone LIKE '%' + @SearchParameter + '%')
OR (TP.NAME LIKE '%' + @SearchParameter + '%')
OR (TP.ID LIKE '%' + @SearchParameter + '%')
END
Ваш заголовок речь идет о производительности, и вы помечено производительность, а также. Если вы получите сообщение об ошибке, производительность - это не вопрос! – HoneyBadger
Да, поставил вопрос. Вводящий в заблуждение заголовок и опечатка ошибки легко-peasy, чтобы найти. Это вопрос мусора. – cybernetic87