Sql 如何在没有EXEC和Print函数的情况下获取查询字符串
我有另一个表#表3,其中存储Sql 如何在没有EXEC和Print函数的情况下获取查询字符串,sql,sql-server,Sql,Sql Server,我有另一个表#表3,其中存储@qur,我想使用该@qur检索数据。 因此,不需要在其他变量中设置所有查询就可以获取数据,并直接执行此查询 这串@qur没有固定,不同的人会有不同。 是的,我使用sql server 2010 CREATE TABLE #Table1 ([Name] varchar(5), [DateVal] date, [TimeVal] time, [Item] varchar(5)) ; INSERT INTO #Table1 ([Name], [DateV
@qur
,我想使用该@qur
检索数据。
因此,不需要在其他变量中设置所有查询就可以获取数据,并直接执行此查询
这串@qur
没有固定,不同的人会有不同。
是的,我使用sql server 2010
CREATE TABLE #Table1
([Name] varchar(5), [DateVal] date, [TimeVal] time, [Item] varchar(5))
;
INSERT INTO #Table1
([Name], [DateVal], [TimeVal], [Item])
VALUES
('Lisa', '2015-04-21', '10:20:06', 'Item1'),
('John', '2015-04-21', '10:25:30', 'Item2'),
('Peter', '2015-03-18', '13:35:32', 'Item3'),
('Ralf', '2015-04-03', '09:26:52', 'Item4')
;
CREATE TABLE #Table2
([ID] int, [Name] varchar(5))
;
INSERT INTO #Table2
([ID],[Name])
VALUES
(1,'Lisa' ),
(2,'John' ),
(3,'Peter'),
(4,'Ralf')
;
DECLARE @qur VARCHAR(2000)='([Item] in (''Item1,Item2'')) and [Name]=''Lisa'') '
SELECT DateVal FROM #Table1
WHERE [Name] in (SELECT [Name] FROM #Table2)
AND @qur
也许您可以在SQLCMD模式下使用下面的查询:
:setvar qur "and ([Item] in ('Item1','Item2')) and [Name]='Lisa' "
SELECT DateVal FROM #Table1
WHERE [Name] in (SELECT [Name] FROM #Table2)
$(qur)
您确定是指SQL Server 2010吗?哦,我很确定您需要EXEC或sp_executesql,我知道要使用Execute,但看起来不是我想要的。我们不使用这样的直接变量查询..最好是显示表3,您当前如何使用
Exec
和print
执行所需操作。在运行时构造的查询=sp_executesql是必需的。没有其他方法可以做到这一点。但是,如果只需要将参数列表传递给where段,则可以构造适当的表并将它们连接到所使用的基本查询。在第三个表中,我存储了不同情况下的不同查询,其中我使用另一个查询号来管理该查询,该查询将在注册时定义。同样使用EXEC,我将在单个变量中获取所有查询和存储,然后执行该变量。我不知道如何在sql server中使用它2010@gaborR它仍然是某种动态sql;/。您也可以在.NET中编写一些代码来避免sp_executesql,但对我来说,这是在欺骗自己;)。无论您以何种方式运行查询,动态SQL都是动态SQL。然而,投票赞成-我以前不知道SQLCMD模式;)。