如果您想了解sql-server-2008–有没有办法可以使用SQLServer管理工作室查找列名包含某个子字符串的所有列?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于SQLServe
如果您想了解sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于SQL Server 2008中的所有列名称如何使用ISNULL?、SQL Server 2008查询以查找列中包含非字母数字字符的行、sql server 2008管理工作室没有检查我的查询的语法、SQL SERVER 数据库查询包含某个字符串的所有物理表的有价值的信息。
本文目录一览:- sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?
- SQL Server 2008中的所有列名称如何使用ISNULL?
- SQL Server 2008查询以查找列中包含非字母数字字符的行
- sql server 2008管理工作室没有检查我的查询的语法
- SQL SERVER 数据库查询包含某个字符串的所有物理表
sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?
我有一个包含数千列的巨大遗留数据库.如果我可以搜索名称中包含某个子字符串的所有列,那就太好了.
有谁知道如何做到这一点?
谢谢!
解决方法
use <your_database> select o.name,c.name from sys.columns c inner join sys.objects o on c.object_id=o.object_id and o.type = 'U' and CHARINDEX('<your_sub_string>',c.name)>=1
SQL Server 2008中的所有列名称如何使用ISNULL?
我试图google,但看起来像他们不喜欢*
我正在使用sql Server 2008.
我有以下数据库表:
P_Id ProductName UnitPrice UnitsInStock UnitsOnorder ------------------------------------------------------------------------ 1 Jarlsberg 10.45 16 15 2 Mascarpone Null 23 NULL 3 Gorgonzola 15.67 9 20
如果我需要用字符串替换null我知道我做:
SELECT ISNULL(UnitsOnorder,'No Data') FROM tbl
问题
>如何用多列名称使用ISNULL()?
>是否可以使用*
喜欢
SELECT ISNULL(*,'NO data') FROM tbl
我认为这将是棘手的,因为数据类型,你不能传递字符串到INT数据类型,所以我怎么可以修复这个
更新
好的,如果我使用的数据类型为int的ISNULL()将返回0
这对我来说是一个价值,我该如何传递空字符串呢?
解决方法
SELECT ISNULL(ProductName,'No Data') AS ProductName,ISNULL(CAST(UnitPrice AS NVARCHAR),'No Data') AS UnitPrice,ISNULL(CAST(UnitsInStock AS NVARCHAR),'No Data') AS UnitsInStock,ISNULL(CAST(UnitsOnorder AS NVARCHAR),'No Data') AS UnitsOnorder FROM tbl
如果您正在构建动态SQL查询,则理论上可以收集表中的列列表,并在每个列上生成具有ISNULL的查询.例如:
DECLARE @sql nvarchar(max) SET @sql = 'SELECT ' SELECT @sql = @sql + 'ISNULL(CAST([' + sc.name + '] AS NVARCHAR),''No Data'') AS [' + sc.name + '],' FROM sys.objects so INNER JOIN sys.columns sc ON sc.object_id = so.object_id WHERE so.name = 'tbl' -- Remove the trailing comma SELECT @sql = LEFT(@sql,LEN(@sql) - 1) + ' FROM tbl' EXEC sp_sqlexec @sql
将某些列类型(如时间戳)转换为nvarchar时,此代码有问题,但它说明了该技术.
请注意,如果您有另一列应该返回值,如果值为null,则可以使用COALESCE表达式,如下所示:
SELECT COALESCE(ProductName,P_Id) AS Product...
SQL Server 2008查询以查找列中包含非字母数字字符的行
实际上,几周前有人问我自己,而我确切地知道如何使用SP或UDF来执行此操作,但是我想知道是否有没有这些方法的快速简便的方法。我假设有,但我找不到。
我需要说明的一点是,尽管我们知道允许使用哪些字符(az,AZ,0-9),但我们 不想指定 不允许使用的字符(#@!$等…)。另外,我们希望拉出
包含 非法字符的行,以便可以将其列出给用户修复(由于我们无法控制输入过程,因此此时无法执行任何操作)。
之前,我已经浏览过SO和Google,但找不到能满足我要求的内容。我已经看到了许多示例,这些示例可以告诉您它是否包含字母数字字符,但是可以在查询形式中找不到的句子中加上撇号。
另请注意,此列中的值可以是null
或''''
(空)varchar
。
答案1
这不是吗?
SELECT * FROM TABLEWHERE COLUMN_NAME LIKE ''%[^a-zA-Z0-9]%''
设置
use tempdbcreate table mytable ( mycol varchar(40) NULL)insert into mytable VALUES (''abcd'')insert into mytable VALUES (''ABCD'')insert into mytable VALUES (''1234'')insert into mytable VALUES (''efg%^&hji'')insert into mytable VALUES (NULL)insert into mytable VALUES ('''')insert into mytable VALUES (''apostrophe '''' in a sentence'')SELECT * FROM mytableWHERE mycol LIKE ''%[^a-zA-Z0-9]%''drop table mytable
结果
mycol----------------------------------------efg%^&hjiapostrophe '' in a sentence
sql server 2008管理工作室没有检查我的查询的语法
我有这个查询
delete from Photo where hs_id in (select hs_id from Hotelsupplier where id = 142)
它执行得很好(后来我发现整个照片表都是空的)
但奇怪的是:在Hotelsupplier中没有字段hs_id,它被称为hs_key!
所以当我执行最后一部分
select hs_id from Hotelsupplier where id = 142
单独(使用鼠标选择该部分查询并按F5),我收到一个错误,但是当我在in子句中使用它时,它不会!
我不知道这是否是正常行为?
解决方法
不合格的列引用从最接近的范围向外解析,因此这仅仅被视为相关的子查询.
此查询的结果将是从Photos中删除所有行,其中hs_id不为null,只要Hotelsupplier至少有一行id = 142(因此子查询返回至少一行)
如果你考虑这是什么影响,可能会更清楚一些
delete from Photo where Photo.hs_id in (select Photo.hs_id)
这当然等同于
delete from Photo where Photo.hs_id = Photo.hs_id
顺便说一句,这是我最亲眼看到的最常见的“错误”,我个人认为微软在Microsoft Connect上报错了. Erland Sommarskog在他的wishlist中包含了SET STRICT_CHECKS ON
SQL SERVER 数据库查询包含某个字符串的所有物理表
create PROCEDURE [dbo].[SP_FindValueInDB]
(
@value VARCHAR(1024)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @sql VARCHAR(1024)
DECLARE @table VARCHAR(64)
DECLARE @column VARCHAR(64)
CREATE TABLE #t (
tablename VARCHAR(64),
columnname VARCHAR(64)
)
DECLARE TABLES CURSOR
FOR
SELECT o.name, c.name
FROM syscolumns c
INNER JOIN sysobjects o ON c.id = o.id
WHERE o.type = ''U'' AND c.xtype IN (167, 175, 231, 239)
ORDER BY o.name, c.name
OPEN TABLES
FETCH NEXT FROM TABLES
INTO @table, @column
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = ''IF EXISTS(SELECT NULL FROM ['' + @table + ''] ''
SET @sql = @sql + ''WHERE RTRIM(LTRIM(['' + @column + ''])) LIKE ''''%'' + @value + ''%'''') ''
SET @sql = @sql + ''INSERT INTO #t VALUES ('''''' + @table + '''''', ''''''
SET @sql = @sql + @column + '''''')''
EXEC(@sql)
FETCH NEXT FROM TABLES
INTO @table, @column
END
CLOSE TABLES
DEALLOCATE TABLES
SELECT *
FROM #t
DROP TABLE #t
End
今天的关于sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?的分享已经结束,谢谢您的关注,如果想了解更多关于SQL Server 2008中的所有列名称如何使用ISNULL?、SQL Server 2008查询以查找列中包含非字母数字字符的行、sql server 2008管理工作室没有检查我的查询的语法、SQL SERVER 数据库查询包含某个字符串的所有物理表的相关知识,请在本站进行查询。
本文标签: