I get this error regularly and have found it's by far the most annoying error in SQL Server. What does it mean and why can't I do things like the following:
ALTER PROCEDURE [dbo].[procEntitySearch]
@EntityTypeID int,
@EntityName nvarchar(50) = NULL,
@StreetNumber nvarchar(10) = NULL,
@StreetName nvarchar(40) = NULL,
@CityZipIndexID int = NULL,
@StateID int = NULL,
@ZipCode nvarchar(5) = NULL
AS
DECLARE @SQL nvarchar(1000)
SET @SQL = 'SELECT E.ID, E.[Name]
FROM dbo.tblEntityType AS ET
RIGHT OUTER JOIN dbo.tblEntity AS E
LEFT OUTER JOIN dbo.tblStates AS ST
RIGHT OUTER JOIN dbo.tblCounties AS CO
RIGHT OUTER JOIN dbo.tblCities AS CI
RIGHT OUTER JOIN dbo.tblCityZipIndex AS CZI
ON CI.CityFIPS = CZI.CityFIPS
LEFT OUTER JOIN dbo.tblZipCodes AS ZC
ON CZI.ZipCode = ZC.ZipCode
ON CO.CountyFIPS = CI.CountyFIPS
ON ST.StateFIPS = CO.StateFIPS
ON E.CityZipIndexID = CZI.ID
ON ET.ID = E.EntityTypeID
WHERE ET.ID = ' + @EntityTypeID
IF NOT @EntityName = NULL
BEGIN
SET @SQL = @SQL + ' AND E.[Name] = ' + char(34) + @EntityName + char(34)
END
IF NOT @StreetNumber = NULL
BEGIN
SET @SQL = @SQL + ' AND E.StreetNumber = ' + char(34) + @StreetNumber + char(34)
END
IF NOT @StreetName = NULL
BEGIN
SET @SQL = @SQL + ' AND E.StreetName = ' + char(34) + @StreetName + char(34)
END
IF NOT @CityZipIndexID = NULL
BEGIN
SET @SQL = @SQL + ' AND CZI.ID = ' + @CityZipIndexID
END
IF NOT @StateID = NULL
BEGIN
SET @SQL = @SQL + ' AND ST.ID = ' + @StateID
END
IF NOT @ZipCode = NULL
BEGIN
SET @SQL = @SQL + ' AND ZC.ZipCode = ' + char(34) + @ZipCode + char(34)
END
EXECUTE (@SQL)
All I ultimately want is string concatenation within a Stored Procedure, but I can't use any variables unless they are of the nvarchar type. I can't simply convert these variables since they are numeric. Any suggestions?
into #YourTempTable
From AllYourJoined Tables
IF NOT @EntityName = NULL
BEGIN
DELETE FROM #YourTempTable WHERE E.[Name] <> @EntityName
END
IF Etc....
select * from #YourTempTable
will that do it for you?