Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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(MSSQL)_Sql_Sql Server_Tsql - Fatal编程技术网

使用变量内联SQL(MSSQL)

使用变量内联SQL(MSSQL),sql,sql-server,tsql,Sql,Sql Server,Tsql,可能会这样做。。。MSSQL 其中@myText变量等于“id=5”字符串 SELECT * FROM someTable WHERE ( @myText ) 您需要使用动态SQL。在SQL Server中,这看起来像: declare @sql nvarchar(max); set @sql = 'SELECT * FROM someTable WHERE ([myText])'; set @SQL = replace(@sql, '[mytext]', @mytext); exec

可能会这样做。。。MSSQL

其中@myText变量等于“id=5”字符串

SELECT * FROM someTable WHERE ( @myText )

您需要使用动态SQL。在SQL Server中,这看起来像:

declare @sql nvarchar(max);

set @sql  = 'SELECT * FROM someTable WHERE ([myText])';

set @SQL = replace(@sql, '[mytext]', @mytext);

exec sp_executesql @sql;

谢谢各位。在你的帮助下,我使用了这样的临时表格

DECLARE @companies TABLE (comp_code INT)    -- create temporary table
INSERT INTO @companies VALUES (5)           -- ( repeat this line for each additional company you wish to keep )

DELETE FROM tableOne Where (Comp_Code NOT IN (select comp_code from @companies));
DELETE FROM tableTwo Where (Comp_Code NOT IN (select comp_code from @companies));
DELETE FROM tableThree Where (Comp_Code NOT IN (select comp_code from @companies));
-- etc etc

除非您正在使用动态SQL,否则这是不可能的,即使您使用了动态SQL,这也是一个非常非常糟糕的主意,因为不可能保护这样的东西不受SQL注入的影响。为什么要这样做?您试图解决的实际问题是什么?您可能只需要了解如何正确使用参数……您的意思是
WHERE MyColumn=@MyVar
?如果没有,那么Zohar已经给出了一个简短的回答。我们正在清除一堆表,即不同表上的许多delete语句(带有条件)。。。正在寻找一种使脚本更易于实现的方法。现在,每个表都有许多单独的命令,每个命令都具有相同的条件。听起来,参数就是您所需要的<代码>从[表]中删除,其中ID=@ID。不确定生成语句的应用程序平台是什么,但几乎任何“现代”应用程序平台或库都能够创建和执行参数化sql语句。这并不能解释这里的任何重大注入问题。就其本身而言,这只是一个有待利用的安全漏洞。此外,这些表之间可能存在某种关系,因此最好的方法可能是在DELETE CASCADE上使用
(这取决于给定的信息,我个人将使用动态sql作为最后一个选项)坦白地说,Gordon,我可能会对经验较少的人做出这样的回答,但这是来自一位具有您声誉的专家,这个答案根本不应该发布,如果你真的想发布它,至少你应该解释一下为什么这是一个如此糟糕的想法。