Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在没有EXEC和Print函数的情况下获取查询字符串_Sql_Sql Server - Fatal编程技术网

Sql 如何在没有EXEC和Print函数的情况下获取查询字符串

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

我有另一个表#表3,其中存储
@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模式;)。