什么是'''''在SQL Server中意味着什么?

时间:2015-08-11 13:52:59

标签: sql sql-server-2012

我已经写过这段代码而有人帮助了我,但我无法弄清楚'''''''''''''''对数据库引擎意味着。这真的有助于我理解我在这里所写的内容。

 USE master
 EXEC sp_MSforeachdb 'use ? select ''?'', st.NAME, sc.NAME,         
 sc.system_type_id, db_name()
 FROM sys.tables st
 INNER JOIN sys.columns sc ON st.object_id = sc.object_id
 WHERE (st.name LIKE ''rawp%'' or st.name like ''main'')'

我理解我在实例中搜索所有数据库中的列名及其相关表格,但我需要了解'''''''''''''''适合查询。谢谢!

6 个答案:

答案 0 :(得分:2)

来自http://weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx

  

请注意,[?]用作此前未指定数据库名称的占位符

因此?将替换为数据库名称。

请注意,将其写为

可能更好
EXEC sp_MSforeachdb 'use [?] select ''?'', st.NAME, sc.NAME, 

支持数据库"搞笑"名称,如[Hello[] World'

答案 1 :(得分:1)

使用?时,sp_MSforeachdb是所有数据库名称的占位符。因此,当它遍历所有数据库时,它会将?替换为您使用的调用存储过程的指定即席查询中的实际数据库名称。

注意:建议不要使用此存储过程。 Please see the following blog post on reasons why not to use sp_MSforeachdb

答案 2 :(得分:0)

这通常意味着准备好的语句,参数将在以后填写。 (见http://en.wikipedia.org/wiki/Prepared_statements#Parameterized_statements)。但是这里是数据库名称的占位符

答案 3 :(得分:0)

您可能想查看这个问题,该问题有答案。

What does a question mark represent in SQL queries?

答案 4 :(得分:0)

?它通常是参数的占位符,稍后会填充。有关详细信息,请参阅https://en.wikipedia.org/wiki/Prepared_statement#Parameterized_statements

答案 5 :(得分:0)

sp_msforeachdb有点......特别。我的意思是部分地乘坐短途巴士"这个词的意义(甚至在这里并不完全公平;我的主要抱怨是它没有记载),但大多数情况下我只是意味着它是独一无二的。此语法仅用于sp_msforeachdbsp_msforeachtable,并且在Sql Server本身中没有其他地方使用。

但是,您应该想到的是,您是否编写过使用OLE或ODBC提供程序进行参数化查询的代码。这些工具使用?字符作为参数占位符。类似的东西在这里发生。 ?字符是参数占位符,其中参数的值稍后将设置为服务器中每个数据库的名称,包括mastertempdbmodel ,和msdb

尝试运行此代码以了解其工作原理:

EXEC sp_MSforeachdb 'print ''?'' '

将这个过程用于维护,报告和警报脚本这样的事情很诱人,但是你可能只想谨慎地做一些事情。最好不要依赖无证行为。在另一个答案中首先发布的sqlblog link是关于该主题的标准思考。

基本上,可能没有特定的计划退休或破坏此程序(或其他sp_*程序),但也有很多投资将这些程序从版本转移到版本。例如,链接的文章表明sp_msforeachdb依赖于旧dbo.sysdatabases而不是更正确的sys.databases。我不希望微软直接定位sp_msforeachdb,但是如果他们决定删除dbo.sysdatabases,我的期望是他们的测试会发现sp_msforeachdb被破坏了,那时他们也只是删除了sp_msforeachdb而不是修复它。