Reputation: 11
I not sure why I'm losing context at FROM @TableName
at line 36. I got this code of stack and am trying to change it to output to the screen and not a table. SQL Server Management Studio does not know the variable but does knows that same variable from the line just above it.
DECLARE @TableName nvarchar(256),
@ColumnName nvarchar(128),
@SearchStr2 nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%28217965%','''')
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped') = 0)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
SELECT @TableName + '.' + @ColumnName, LEFT( @ColumnName, 3630)
FROM @TableName
WHERE @ColumnName + ' LIKE ' + @SearchStr2
END
END
END
Upvotes: 0
Views: 44
Reputation: 32145
SELECT @TableName + '.' + @ColumnName, LEFT( @ColumnName, 3630)
FROM @TableName
WHERE @ColumnName + ' LIKE ' + @SearchStr2
This is not valid T-SQL. @TableName
is a scalar variable, not a table variable. You can't use variable table names like this. You'd have to use dynamic SQL to accomplish what you're trying. Take a look at the EXEC()
statement.
Try something like:
DECLARE @SQL VARCHAR(MAX);
....
IF @ColumnName IS NOT NULL
BEGIN
SELECT @SQL = 'SELECT ' + @TableName + '.' + @ColumnName + ', LEFT(' +
@ColumnName + ', 3630) FROM ' + @TableName + ' WHERE ' + @ColumnName +
' LIKE ' + @SearchStr2;
EXEC(@SQL);
END
....
Upvotes: 1