我有一个查询,其中我希望将表名[TableX]
设为变量。
此查询需要使用不同的变量多次执行。所以我想知道是否可以创建一个(临时)表,在其中可以查找这些变量的值?
e.g。
list language Table
----------------------------
51 152 TableX
52 154 TableY
53 156 TableZ
代码:
declare @list int='51' -- change
declare @language int='152' -- change
insert into [DB].[Table] ([list], [value2], [language])
Select
@list, value2, @language
From
[DB2].[TableX] -- change table name
谢谢
答案 0 :(得分:0)
如果您还没有准备好更改数据模型,但您的表(TableA,...,TableZ)是相同的,您可以使用这样的VIEW:
CREATE VIEW MyTables
AS
SELECT [value1], [value2], [value3], [value4], 'TableA' AS TableName
FROM [DB2].[TableA]
UNION ALL
/*
.
.
.
.
.
*/
SELECT [value1], [value2], [value3], [value4], 'TableY'
FROM [DB2].[TableY]
UNION ALL
SELECT [value1], [value2], [value3], [value4], 'TableZ'
FROM [DB2].[TableZ]
GO
然后使用:
declare @list int= 51 -- change
declare @language int = 152 -- change
insert into [DB].[Table]
([list]
,[value2]
,[language])
Select
@list,
value2,
@language
FROM MyTables m
JOIN [SomeTable] s ON s.[Table] = m.TableName
WHERE s.list = @list
AND s.language = @language
答案 1 :(得分:0)
您必须使用动态SQL来执行此操作:
$str='localhost/used_cars/search/mk_honda/md_city/mk_toyota';
$str=explode('/',$str);
$final=[];
foreach ($str as $words){
(!empty(explode('_',$words)))?(isset(explode('_',$words)[1]))?$final[]=explode('_',$words)[1]:false:false;
}
$final=implode(',',$final);
echo $final;
当然这是一个简单的例子,我强烈建议您参数化它并使用executeSQL而不是exec。