Reputation: 3493
I'm making a storet procedure that basicly just does 1 dynamic query with the result from another dynamic query as alias for 1 column. However, I get the following two errors (id doesn't say where):
This is my code:
ALTER PROCEDURE myProcedure
@param1 NVARCHAR(50),
@param2 NVARCHAR(50),
@param3 int
AS
BEGIN
DECLARE @query Nvarchar(2000)
DECLARE @columnName Nvarchar(250)
DECLARE @columnNameOUT Nvarchar(250)
set @columnName = ''
SELECT @query = 'SELECT (@columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108)) AS alias FROM TimeStamps WHERE [param3] = ''' + CAST(@param3 AS VARCHAR) + ''' AND param2 = ''' + @param2 + ''' AND [param1] = ''' + @param1 +''''
EXECUTE sp_executesql @query, N'@columnNameOUT NVARCHAR(30) OUTPUT', @columnNameOUT = @columnName OUTPUT
set @query = ''
IF @param1 IS NULL
BEGIN
SELECT @query = 'SELECT column1 AS '''+@columnName+''', column2, column3 ETA FROM myTable WHERE [param3] = '''+CAST(@param3 AS VARCHAR) +''' AND param2 = '''+@param2+''' AND [param1] IS NULL order by column1'
END
ELSE
BEGIN
SELECT @query = 'SELECT column1 AS '''+@columnName+''', column2, column3 ETA FROM myTable WHERE [param3] = '''+CAST(@param3 AS VARCHAR) +''' AND param2 = '''+@param2+''' AND [param1] ) '''+@param1+''' order by column1'
END
EXEC(@query);
END
Upvotes: 0
Views: 9731
Reputation: 3493
Finally solved it myself!
Turns out that this little query:
SELECT @query = 'SELECT (@columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108)) AS alias FROM TimeStamps WHERE [param3] = ''' + CAST(@param3 AS VARCHAR) + ''' AND param2 = ''' + @param2 + ''' AND [param1] = ''' + @param1 +''''
Had a chance of returning empty. So after adding a IF @columnName = ''
everything worked out.
And changing this line:
... 'SELECT (@columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108)) AS alias FROM ...
To this:
...'SELECT @columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108) FROM...
Made the other error disappear too :)
Upvotes: 0
Reputation: 10140
First of all, there is a problem with bracket:
' AND [param1] ) '
Your second problem was in ELSE statement (there is a solution):
BEGIN
SELECT @query = 'SELECT column1, column2, column3 ETA
FROM myTable
WHERE [param3] = '''+CAST(@param3 AS VARCHAR) +'''
AND [param2] = '''+@param2+'''
AND [param1] = '''+@param1+''' order by column1';
END
But the first problem looks like here, but don't know how to fix it:
SELECT @query = 'SELECT (@columnNameOUT = CONVERT(time(0), TimeStamps."timeStamp", 108)) AS alias
Hope it could help you
Upvotes: 1