我有两个表TableA和TableB,这些表中的数据将根据特定过程进行填充(如果值最终确定,则TableA类似于临时表,则数据将移至TableB)
基于该X条件 我将从TableA中选择值,否则从TableB中选择
If X=10 condition
select col1,col2,col3,col4 from TableA
else
select col1,col2,col3,col4 from TableB
两个表TableA和TableB将具有相同的表结构,所以在这里我不想通过单独更改表名来再次使用相同的代码语句。是否可以使用其他任何方法而无需通过更改来重复执行select语句桌子。
答案 0 :(得分:1)
或者您也可以尝试:
DECLARE @x AS INT
DECLARE @sqlquery AS NVARCHAR(100)
SET @x = 10 --ignore this if you already have a value for x
SET @sqlquery = 'SELECT * FROM '+ CASE WHEN @x = 10 THEN 'TableA' ELSE 'tableB' END
EXEC SP_EXECUTESQL @sqlquery
答案 1 :(得分:0)
我想你想要这个:
DECLARE @tableName varchar(20)
IF 1=1
set @tableName = 'table1'
ELSE
set @tableName = 'table2'
EXEC ('SELECT * FROM ' + @tableName)
答案 2 :(得分:0)
您可以简单地将条件放入UNION语句中。
如果@condition = 1,我们仅从tableA中选择,否则我们仅从tableB中选择。
DECLARE @condition bit
SET @condition = 0
SELECT * FROM [dbo].[TableA] WHERE @condition = 1
UNION
SELECT * FROM [dbo].[TableB] WHERE @condition != 1
答案 3 :(得分:0)
我要实现的方法是使用变量和联合查询。该变量允许您为where子句提供真正错误的条件,以便从所需表中返回所有内容,而从不需要表中返回所有内容。这些表的结构使您可以在并集语句中使用查询,以便可以在一处看到所有代码。
Declare @x int = 10
Select col1, col2, col3, col4 from TableA where @x=10
Union
Select col1, col2, col3, col4 from TableB where @x<>10;