使用行值在SELECT语句中

我试图用由SQL查询检索的行中的另一个SQL查询作为列和表名使用行值在SELECT语句中

例如:

declare @var1 varchar(max) 

declare @var2 varchar(max)

declare @result varchar(max)

set @var1 = 'cctl_country'

set @var2 = 'typecode'

set @result = 'select '[email protected]+' from '[email protected]

print @result

在上面的例子中,输出将是select typecode from cctl_country。 它也应该像select cctl_country,typecode from cctl_country一样。 table_name应该跟在typecode之后。

但是,扭曲的是,@ VAR1是动态的,并不断变化,这需要从信息架构检索。 因此,对于@ var1值的每个更改,我需要执行select查询并将结果集插入到另一个表中。 我在下面的代码中尝试了同样的事情,但我陷入了困境。有一点帮助,将不胜感激

CREATE PROCEDURE usp_try 

AS

BEGIN

DECLARE @StartLoop INT

DECLARE @EndLoop INT

DECLARE @esal INT

DECLARE @sqlquery varchar(max)

DECLARE @Result TABLE (table_name nvarchar(100),typecodes nvarchar(100))

DECLARE @InitResult TABLE (id INT IDENTITY(1, 1),

table_name NVARCHAR(50),

typecode NVARCHAR(50))

INSERT INTO @InitResult

select col.TABLE_NAME,'typecodes' as typecodes from [NFUM_Studio].INFORMATION_SCHEMA.COLUMNS col

inner join [NFUM_Studio].INFORMATION_SCHEMA.TABLES tab

on col.TABLE_NAME = tab.TABLE_NAME

where col.COLUMN_NAME = 'typecode'

SELECT @StartLoop = MIN(ID),

@EndLoop = MAX(ID)

FROM @InitResult

WHILE @StartLoop <= @EndLoop

BEGIN

SET @sqlquery = 'insert into @Result

select table_name,typecode from @InitResult'

SET @StartLoop = @StartLoop + 1

END

SELECT *

FROM @Result

END

回答:

最后我能得到输出,但与光标

DECLARE @@CC_TABLENAME VARCHAR(255) 

declare @cc_exec varchar(255)

declare @cc_table varchar(255)

create table #temp(table_name varchar(max),typecode varchar(max))

DECLARE @CSR_TL AS CURSOR;

SET @CSR_TL = CURSOR FOR

select col.TABLE_NAME from [NFUM_Studio].INFORMATION_SCHEMA.COLUMNS col

where col.COLUMN_NAME = 'typecode'

OPEN @CSR_TL

FETCH NEXT FROM @CSR_TL INTO @@CC_TABLENAME

WHILE @@FETCH_STATUS = 0

BEGIN

set @cc_exec = 'insert into #temp(typecode) select typecode from '[email protected]@CC_TABLENAME

exec(@cc_exec)

set @cc_table = 'update #temp set table_name='''[email protected]@CC_TABLENAME+''' where table_name is null'

exec(@cc_table)

FETCH NEXT FROM @CSR_TL INTO @@CC_TABLENAME

END

--drop table #temp

CLOSE @CSR_TL

DEALLOCATE @CSR_TL

回答:

刚开始使用的,而不是表变量temp表尝试,并没有必要加入Information_Schema.ColumnsInformation_Schema.Tables。你也错过了执行存储在@strQuery查询,只需使用EXEC(@strQuery)

CREATE PROCEDURE usp_try 

AS

BEGIN

DECLARE @StartLoop INT

DECLARE @EndLoop INT

DECLARE @esal INT

DECLARE @sqlquery varchar(max)

CREATE TABLE #Result(table_name nvarchar(100),typecodes nvarchar(100))

CREATE TABLE #InitResult(id INT IDENTITY(1, 1),

table_name NVARCHAR(50),

typecode NVARCHAR(50))

INSERT INTO #InitResult

select col.TABLE_NAME,'typecodes' as typecodes from [NFUM_Studio].INFORMATION_SCHEMA.COLUMNS col

where col.COLUMN_NAME = 'typecode'

SELECT @StartLoop = MIN(ID),

@EndLoop = MAX(ID)

FROM @InitResult

WHILE @StartLoop <= @EndLoop

BEGIN

SET @sqlquery = 'insert into #Result SELECT * FROM ('

SELECT @sqlquery = @sqlquery + 'SELECT ''' + Table_name + ''' as [Table_name], [' + type_code + '] FROM ' + Table_name ' UNION ALL '

FROM #InitResult

SET @sqlquery = SUBSTRING(@strquery,1,LEN(@strquery) - 11)

SET @sqlquery = @sqlquery + ') AS T1'

EXEC(@strquery)

SET @StartLoop = @StartLoop + 1

END

SELECT *

FROM #Result

END

以上是 使用行值在SELECT语句中 的全部内容, 来源链接: utcz.com/qa/258342.html

回到顶部